2016-10-30 6 views
-1
void clrKyb(void) 
{ 
    char c[30]; 

    scanf("%s",c); 

    for(int i = 0; i < 30; i++){ 
     if(c[i] == '\n'){ 
      i = 30; 
     } 
    } 
} 

void pauses(void) 
{ 
    printf("Press <ENTER> to continue:"); 
    clrKyb(); 
} 

こんにちは、私は "ポーズ"機能に立ち往生しています。続行するにはEnterキーを押しても機能しませんか?C - Enterキーを押して続行しますか?

+0

'%s'は単語を読み込もうとします。 Enterだけを押すと単語がないので、待っています。 – Barmar

+0

'scanf'は安全ではありません。代わりに 'scanf_s'を使用してください。 https://msdn.microsoft.com/en-us/library/w40768et.aspx – Dai

+0

@Dai:マイクロソフト固有のものではありませんか? –

答えて

3

getchar()を使用すると、stdinから読み込まれた最初の文字が返され、Enterキーが押されるまで待機します。

#include <stdio.h> 
void clrKyb(void) { 
    while ((c = getchar()) != '\n' && c != EOF) {}; 
} 
void pause(void) { 
    printf("Press <ENTER> to continue."); 
    clrKyb(); 
} 

私はこれが宿題であると感じています。次回は事前にお知らせください。回答ではなく指導を提供しています。

+0

私はまた1文字以上のものを読むことも必要です。たとえば、「abcd」と入力します。 – user3013760

+0

@ user3013760実際に入力が返される必要がありますか?あなたの例はそれをしないからです。この関数は2文字以上の文字列を検出できますが、最初の文字列のみを返します。 getchar()の戻り値が '\ n'であるかどうかを確認する必要はありません。続行すると、Enterキーがヒットしたことがわかります。 – dshus

+0

これは他の関数で返されますが、これらはすべて動作します。私は「一時停止」にしか止まらない。 を押すだけでコードの残りの部分が続きます。 – user3013760

関連する問題