C言語
現在、ストップウォッチの一時停止およびラップをとる機能のプログラムを作成しているのですが、
「計測中にtを押すと一時停止.一時停止中にtで計測再開」の部分は計測していないときに計測が開始されてしまいます。(計測中の処理は上手く動作できました)
「計測中にlを押すとラップをとる」という使い方の部分も同様に計測していないときに計測が開始されてしまいます。それから、実際に計測中にlを押したとき、ラップタイムではなく、スピリットタイムで表示されてしまい、上手く動作しません。
至急、修正または追加のほうお願いします。
#include <windows.h>
#include <mmsystem.h>
#include <stdio.h>
#include <conio.h>
#pragma comment(lib, "winmm.lib")
void disp(DWORD time_value)
{
printf("%02d:%02d:%02d:%03d\r",time_value/3600000,(time_value/60000)%60,(time_value/1000)%60,time_value%1000);
}
int main(void)
{
int add_flag = 0;
DWORD counter=0,start_time,cur_time;
printf("使い方:小文字の's'でカウントスタート.カウント中,小文字の's'で停止.次の's'でまた0からスタート\n");
printf("使い方:どんな状態でも小文字の'r'でカウントリセットして停止\n");
printf("使い方:qでプログラム終了\n\n");
printf("使い方:計測中にtを押すと一時停止.一時停止中にtで計測再開\n");
printf("使い方:計測中にlを押すとラップをとる\n");
disp(counter);
for (;;){
start_time = timeGetTime();
while (start_time == (cur_time = timeGetTime()))
{
if (kbhit()) {
switch (_getch()){
case 's':
disp(counter);
printf(add_flag ? "\n計測中止\n" : "\n計測開始\n");
add_flag = !add_flag;
start_time = cur_time = timeGetTime();
counter = 0;
break;
case 't':
disp(counter);
printf(add_flag ? "\n一時停止\n" : "\n計測再開\n");
add_flag = !add_flag;
start_time = cur_time = timeGetTime();
break;
case 'r':
disp(counter);
printf("\nカウンタリセット,停止\n");
add_flag = 0;
counter = 0;
start_time = cur_time = timeGetTime();
break;
case 'l':
disp(counter);
printf("\nラップ\n");
add_flag = 1;
break;
case 'q':
printf("\n終了\n");
return 0;
}
disp(counter);
}
}
if (add_flag != 0){
counter += cur_time - start_time;
disp(counter);
}
}
}