2016-12-10 6 views
-1

私は1秒ごとにカウンタをインクリメントし続け、 'q'が押されたときにだけインクリメントを停止する簡単なコードを作成しています。Qを押してループを終了します

私はgetchar()とgetline()を試しましたが、すべてのループの入力をユーザーが入力する必要があります。

私は(Ctrl + c)で終了するまで、このコードはコンソール上で数え続けます。同じ機能を実行するには 'q'を使います。

#include <stdio.h> 
#include <stdlib.h> 
#include <windows.h> 
int j=0; 
int main() 
{ 
    printf("Enter Q to quit !\n"); 
    while(1) 
    { 
    j++; 
    printf("%d\n",j); 
    Sleep(1000); 
    system("cls"); 
    } 
    return 0; 

} 
+2

私はMSVCがキープレスを検出するために 'kbhit()'または '_kbhit()'を持っているので、その後に 'getch()'や '_getch()'を呼び出してそのキーを取得します。 –

+0

本当に、 "' system( "cls"); '"? 2016年に? – usr2564301

答えて

1

MSVCは、あなたがそのキー入力を取得するためにgetch()または_getch()を呼び出した後にキーを押して、検出するkbhit()または_kbhit()を持っているので、私は、Windowsを使用している参照してください。

#include <conio.h> 
#include <stdio.h> 
#include <windows.h> 

int main() 
{ 
    int j=0; 
    printf("Enter Q to quit !\n"); 
    do { 
     j++; 
     printf("%d\n",j); 
     Sleep(1000); 
    } while (kbhit() == 0 || getch() != 'Q'); 
    return 0; 
} 

なぜwhilegetchをブロックしないのですか?短絡回路評価のため。 kbhit == 0が真の場合、getch() != 'Q'は評価されません。

1

あなたがwindows.hが含まれているという事実は、私はあなたがkbhit()機能を探していると思わせます。リンクされたページから:

この関数は、ANSI C/C++標準の一部として定義されていません。これは一般的に、Borlandのコンパイラファミリーによって使用されます。キーがキーボードバッファーにある場合、ゼロ以外の整数を返します。キーが押されるのを待つことはありません。 UNIX/Linuxの

、あなたは@i_am_jorfによってリンクanswerで説明したように、端末モードの操作に頼る必要があります。

関連する問題