我从书中复制代码,这是一个像打击一样的循环,
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):
为什么会发生这件事?
答案 0 :(得分:1)
您会被输入流中留下的换行符占据。
格式字符串中的前导空格将确保scanf()忽略所有空格。因此,后一版本按预期工作。
您可以在 scanf() :
的手册中找到此信息由一个或多个空白字符组成的指令应为 通过读取输入执行,直到无法读取或向上读取更多有效输入 到第一个不是空白字符的字节,它仍然存在 未读。