1

簡単なタイマーを書きました。「s」を押すと(送信するためにEnterキーを押さずに)、タイマー(forループ)が開始します。終わりのないループです。起動時と同じように、ユーザーが「s」を押すとすぐに停止したい。「s」を押すとすぐに(送信するためにEnterキーを押さずに)、ループが停止するはずです。どうやってするの?

#include <iostream>
#include <stdlib.h>
#include <conio.h>
using namespace std;

int main()
{
    char ch;
    int m=0,h=0;
    if ((ch = _getch()) == 's')
        for (int i=0;;i++)
        {
            cout << "h   m   s" << endl;
            cout << h << "   " << m << "   " << i;
            system("CLS");
            if (i==60) {i=0;m+=1;}
            if (m==60) {m=0;h+=1;}
            if (h==24) {h=0;}
        }
    return 0;
}
4

1 に答える 1

3

volatileループを終了するための条件として使用する別の変数を用意します。

別のスレッドで(ユーザー入力をリッスンし、同時にループを続行する唯一の方法)、ユーザーがを押したときに変数を変更します"s"

volatile bool keepLoopGoing = true;

//loop
for (int i=0; keepLoopGoing ;i++)
    cout << i << endl;

//user input - separate thread
while ( keepLoopGoing )
{
   cin >> input;  // or getchar()
   if ( input == "s" )
      keepLoopGoing = false;
}

i何かを押す前にオーバーフローする可能性が非常に高いことに注意してください。

于 2012-05-27T14:10:11.600 に答える