0

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

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):

为什么会发生这种事情?

4

1 回答 1

1

您被输入流中留下的换行符击中。

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

您可以在scanf()的手册中找到此信息:

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

于 2013-10-08T16:00:30.487 回答