-5

次の機能を実現する時計プログラムを作成します。 a) 任意のキーを押してタイマーを開始します。b) 「S」キーを押してタイマーを開始するか、「E」キーを押してタイマーを停止するか、時刻が 00:00:00 のときに押します。

これが私がこれまでに持っているものです

#include <stdio.h>
#include <windows.h>
#include <conio.h>
main()
{
 long int t;
 int flag =0;
 t = 86400;
 printf("press S start, press E stop\n");
 while(1)
 {
  if (kbhit()== 'S' || kbhit() == 's')
   flag =1;
  if (getch() == 'E' || getch() == 'e')
  { flag =0;
   continue;
  }
  if(t <= 0)
   break;
  if(flag == 1)
  {
  t=t-1;
  Sleep(1000);
  printf("%d ",t);
  }
 }
}

うーん、コントロール機能を実現する方法がよくわかりません。「E」を押してタイマーを停止し、「S」を押してタイマーを再度実行するにはどうすればよいですか。

私は初心者で、正しいプログラムを何度も取得することはできません。あなたが私を助けてくれることを願っています。ありがとう!

4

1 に答える 1

1

ループkbhit()ごとに 1 回だけ必要です。を返しませんchar
2回呼び出していますがgetch()、ループごとに1回だけ必要です。
意味を改善する必要がありflagます。に変更するかもしれませんStoppedFlag

 while (1) {
  if (kbhit()) {
    char ch = getch();
    if ((ch == 'S') || (ch == 's')) {
      flag = 0;
    }
    else if ((ch == 'E') || (ch == 'e')) {
      flag = 1;
    }
  }
  else {
    if(t <= 0) {
      break;
    }
    if (flag == 0) {
      t=t-1;
      Sleep(1000);
      printf("%ld ", t);
    }
  }
}
于 2013-06-07T15:58:27.053 に答える