-1

任意のキーを押して、いつでもループを終了しようとしています。以下のコードを試しましたが、実行できません。あなたの助けが必要です。前もって感謝します。C-Free 5.0を使用しています。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
    int b=0, i;
    int seconds;
    printf("\nEnter number of seconds : ");
    scanf("%d", &seconds);
    while (b==0)
    {
        for(i=1;i<=seconds;i++)
        {
            time_t end = time(0) + 1;
            while(time(0) < end)
            ;
            seconds -= 1;
            printf("Number of seconds left : %d\n", seconds);
            b=kbhit();
        }

        if(seconds == 0)
        {
            exit(0);
        }
    }
    printf("Number of remaining seconds left : %d\n", seconds);
}
4

2 に答える 2

1

最も内側のwhileループで「ビジー待機」しています。これは最善の解決策ではないかもしれませんが、そうしたい場合は、そのループにテストを追加して、キーがヒットしたかどうかを確認する必要があります。

于 2012-11-24T12:01:10.427 に答える
0

ループを終了するには、khbitと呼ばれるC++の関数を使用します。いずれかのキーが押されると1になり、もう一度空にするには、getch()を使用して押されたキーを割り当ててバッファをクリアします。

#include <conio.h>
#include <iostream>

using namespace std;

int main()
{
    while(1)
    {
        if(kbhit())  // khbit will become 1 on key entry.
        {
            break;    // will break the loop
        }

                     // Try to use some delay like sleep(100);  // sleeps for 10th of second to avoid stress on CPU
    }

                     // If you want to use khbit again then you must clear it by char dump = getch();

                     // This way you can also take a decision that which key was pressed like 

                     // if(dump == 'A')

                     //{ cout<<"A was pressed e.t.c";}
}
于 2012-11-24T13:56:29.563 に答える