[C語言] 計時器(Timer)

這篇文章和大家分享如何用C語言寫一個「 能記錄多筆資料的計時器(Timer)」

開發環境

 

程式碼

timer - (ver.English).c

#include <stdio.h>
#include <conio.h>
#include <windows.h>
#define TRUE 1 
#define FALSE 0

int hitAnyKey();
float recordTime();
float rounding(float);
void main()
{
    int cnt;
    int i;
    float timer[cnt];
    float totalTime = 0;
    
    printf("Input the number of timers: ");
    scanf("%d", &cnt);
    
    if(cnt >= 1)  // at least one timer 
    {
        printf("Press any key to start first timer\n");
        getch();
        printf("Start timing...\n");    
        
        // 開始計時 
        for(i = 1; i <= cnt; i++)
        {
            printf("Start No.%d timer!(press any key to stop)\n", i);   
            timer[i] = recordTime();
            totalTime += timer[i];
        }
        
        // Display the time of each timer 
        for(i = 1; i <= cnt; i++)
        {
            printf("No.%d timer: %.2f s\n", i, timer[i]);
        } 
    }
    
    printf("Total process time: %.2f s\n", totalTime); 
    printf("Press any key to exit . . .");
    getch();
}

float recordTime()
{
    int t = 0;   
    float crrentTime;
    while(TRUE)  
    {
        crrentTime = t++ / 100.0;
        printf(" \r %.2f", crrentTime);  // 利用 \r 歸位字元,讓時間始終顯示在同一位置 
        Sleep(10); // 10 ms = 0.01 s
        if(hitAnyKey())
        {
            printf("\a\n");  // 發出聲音並且換行 
            break;
        }
    }
    crrentTime = rounding(crrentTime);
    return crrentTime;
}

// 是否有按任意鍵 
int hitAnyKey()
{
    if(kbhit() && getch())
    {
        return TRUE;
    }
    
    return FALSE;
}

// 四捨五入 取到 小數點第二位 
float rounding(float num)
{
    num = (int)(num * 100 + 0.5) / 100.0;
    return num;
}

 

執行結果(examples):

在程式中輸入0

 

在程式中輸入2

 

參考資料:

逸出序列(Escape sequence)

Sleep function

sleep function in Windows, using C

如果這篇文章有幫助到你,想支持一下作者可以幫忙點擊側欄的「 Goolgle AdSense 」廣告 😄

如果你喜歡這篇文章可以點擊「分享」按鈕,來分享到你的網路社群
(以上文章內容如有謬誤,敬請不吝指教)