2013-11-22 63 views
0
#include <stdio.h> 

int main() 
{ 

    char C, B; 
    int x; 



    printf("What comes after G\n"); 
    scanf("%c", &C); 

    printf("What comes after O\n"); 
    scanf("%c", &B); 

    printf("What is your age?\n"); 
    scanf("%d", &x); 

    printf("You said %c comes after G, %c after T and you're %d years old? Right?", C, B, x); 

    return 0; 
} 

问题是当你运行该代码会跳过第二个问题:“什么来Ò后”,然后问:“你是什么年龄?”与scanf的问题

我可以可以避免程序跳过第二个问题的唯一途径是通过增加一个空格代码

printf("What comes after O\n"); 
    scanf(" %c", &B); 

你可以看到空间

“和 %C之间

请问您能解释一下吗?

+1

有同样的问题>看到这里http://stackoverflow.com/questions/12653884/getchar-does-not-stop-when-using-scanf – Oz123

回答

1

问题是您正在使用scanf来获取字符..并且将在用户输入的每个输入结尾处添加一个新行。所以,第二次,因为你给出的第一个输入的只有新的生产线将被保存在“B” ..

相反scanf函数的,改变它的getchar - 您的问题应该得到解决

+0

'getchar'也会在输入时带额外的'\ n'当你按下输入。 –

+0

使用'getchar'而不是'scanf'不能解决这个问题。 – haccks

0

您可以使用scanf吃单个字符没有它这样的:

scanf("%[^\n]%*c", &C) ; 

分配给什么告诉scanf读取不是'\n'的每个字符。这将'\n'字符留在输入缓冲区中,然后* (assignment suppression)将使用单个字符('\n'),但不会将其分配给任何内容。

0

此问题的原因是在按输入之后由前scanf剩余的换行符\n。这\n是留给下一个电话scanf
为避免此问题,您需要在scanf%c说明符前放置一个空格。

scanf(" %c", &C); 
... 
scanf(" %c", &B); 
... 
scanf(" %c", &X); 

%c之前的空格可以吃掉任意数量的换行符。