2016-06-30 6 views
0

私は現在、私がしたい、それの要旨は非常に単純であるC.に目覚まし時計を作るに取り組んでいます:アラームクロックを実装するためにユーザー入力を渡すにはどうすればよいですか?

  1. は、ローカルにそれを比較
  2. 希望アラーム時刻ためのユーザ入力に取ります時間
  3. デクリメント秒タイマー、そしてそれはしかし、アラーム

に到達したプリントは、私はいくつかの問題を抱えているとしばらく今の立ち往生されています。ここに私がこれまで持っているものがあります:

int u_input(int* uhour, int* uminute, int* usecond); 
void sc_alarm(); 

int main(int argc, char *argv[]) 
{ 
    int uhour, uminute, usecond; 
    u_input(&uhour, &uminute, &usecond); 
    sc_alarm(uhour, uminute, usecond); 
} 

int u_input(int* uhour, int* uminute, int* usecond) 
{ 
    printf("Enter H M S:"); 
    scanf("%d %d %d", uhour, uminute, usecond); 
} 

void sc_alarm(int uhour, int uminute, int usecond) 
{ 
    struct tm *tm; 
    time_t ctime; 
    ctime = time(NULL); 
    tm = localtime(&ctime); 

    int difference, alarm_total, local_time_total; 
    int chour = tm->tm_hour; 
    int cminute = tm->tm_min; 
    int csecond = tm->tm_sec; 

    difference = alarm_total - local_time_total; 
    alarm_total = (uhour * 3600) + (uminute * 60) + usecond; 
    local_time_total = (chour * 3600) + (cminute * 60) + csecond; 

    do 
    { 
    printf("Time left: %d seconds\n",difference);  
    difference--; 
    sleep(1); 
    } 
    while(difference > 0); 

    printf("Alarm!\n"); 

} 
+0

ローカルタイムとアラームタイムを比較しない理由は、アラームで夏時間の問題が発生する可能性があるからです。 – dvhh

答えて

0

あなたが差し引く必要がある値の前に差を計算しています。

また、あなたがWindows上であれば、sleepはそれはミリ秒単位で引数だ取り、あなたがLinuxやUnix sleep上にある場合があります、それを取ることに注意しなければならない

alarm_total = (uhour * 3600) + (uminute * 60) + usecond; 
local_time_total = (chour * 3600) + (cminute * 60) + csecond; 
difference = alarm_total - local_time_total; 

difference = alarm_total - local_time_total; 
alarm_total = (uhour * 3600) + (uminute * 60) + usecond; 
local_time_total = (chour * 3600) + (cminute * 60) + csecond; 

を交換してください引数は秒単位であるため、sleep関数をそれに応じて変更する必要があります。

+0

これはうまくいきました。私は本当にLinuxでコーディングしていることに言及するのを忘れてしまった。あなたの助けにリシケシありがとう! –

関連する問題