2016-11-22 4 views
3

次のスニペットは、第1の入力後に閉じないのはなぜ?:Cプログラムの最初のGETCHAR後にクローズ()

#include <stdio.h> 
int main() { 

    int a; 
    int b; 
    printf("Enter a first value :"); 
    a = getchar(); 

    printf("You entered: "); 
    putchar(a); 

    printf("\n Enter a second value :"); 
    b = getchar(); 
    return 0; 
} 

"Enter a second value :" 
+0

をのgetcharためにあなたのコールの両方のためにそれをチェックしてくださいGETCHAR

while (((b = getchar()) != '\n') && (b != EOF)) { } 

のリターンを確認IMOこれは 'getchar'があまりにも' newline'が必要であることをデフォルトで起訴され、これは未解決の問題と無数の質問をもたらし、これは今後も続くだろう。 MSVCが何か正しいことを得たならば、 'getch'と' kbhit'を使っていましたが、 'scanf'関数ファミリを使うときに同様の問題に対処していません。 –

+0

[なぜ私の教授が2つのgetchar()を使用しているのですか?](http://stackoverflow.com/questions/1432989/why-is-my-professor-using-two-getchar) – anatolyg

+0

混乱がわかりませんです。 –

答えて

1

b = getchar();を印刷する改行文字の左にbを割り当てた後、プログラムを閉じますあなたの最初の入力からの入力ストリームに上書きします。

1

int main() 
{ 
    int a; 
    int b; 
    printf("Enter a first value :"); 
    while (((a = getchar()) != '\n') && (a != EOF)) { } 

    printf("You entered: "); 
    putchar(a); 

    printf("\n Enter a second value :"); 
    while (((b = getchar()) != '\n') && (b != EOF)) { } 
    return 0; 
} 
+1

'&&'は '!='や '=='よりも優先度が高いので、 '(b = getchar())!= '\ n''と' b!= EOF'の括弧が必要です。それ以外は正しい。あなたは '(b = getchar())!=( '\ n' && b)!= EOF'をやっています。 – Blacksilver

+0

@Blacksilverありがとう私は私の投稿を編集しました –

+0

問題ありません。私はいつも間違いを犯します。 – Blacksilver

関連する問題