c编程scanf有线行为

时间:2013-10-08 15:54:06

标签: c scanf

我从书中复制代码,这是一个像打击一样的循环,

for(;;)
{
    printf("enter a value");
    scanf("%lf",&value);
    tot al+=value;
    ++count;
    printf("do you want to enter another value?(N or Y):");
    scanf("%c",&answer);
    if(tolower(answer)=='n')
        break;
}

但它有一些奇怪的行为,当我评估它时,它会给出输出

[tintin@tintin-laptop Documents]$ ./test 
this enter a value3
do you want to enter another value?(N or Y):enter a value

我仔细检查了一下,最后当我改变了

scanf("%c",&answer);

在%c之前有一个空格

scanf(" %c",&answer);

它表现得像

[tintin@tintin-laptop Documents]$ ./test
this enter a value2
do you want to enter another value?(N or Y):y
enter a value3
do you want to enter another value?(N or Y):

为什么会发生这件事?

1 个答案:

答案 0 :(得分:1)

您会被输入流中留下的换行符占据。

格式字符串中的前导空格将确保scanf()忽略所有空格。因此,后一版本按预期工作。

您可以在 scanf()

的手册中找到此信息
  

由一个或多个空白字符组成的指令应为   通过读取输入执行,直到无法读取或向上读取更多有效输入   到第一个不是空白字符的字节,它仍然存在   未读。