2016-11-22 25 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