2016-11-22 21 views
3

爲什麼下面的代碼片斷的第一輸入?: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

IMO這是在默認的起訴書說'getchar'需要'newline'也和這已經造成了無數的麻煩和無數的問題,這些問題將不斷出現。如果MSVC得到任何正確的東西,那就是它的'getch'和'kbhit',儘管它們在使用'scanf'函數族時沒有解決類似的問題。 –

+0

可能重複[爲什麼我的教授使用兩個getchar();?](http://stackoverflow.com/questions/1432989/why-is-my-professor-using-two-getchar) – anatolyg

+0

不知道是什麼混淆是。 –

回答

1

b = getchar();分配b到換行字符左側後關閉在第一個輸入的輸入流中。

1

檢查的getchar的返回

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

檢查它爲您的通話來的getchar

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