c-如何处理stdin中多余的换行符



考虑以下程序:

#include<stdio.h>
int main(){
char c;
printf("Want to continue? :");
scanf("%c",&c);
while(c=='y')
{
printf("Want to continue? :");
scanf("%c",&c);
}
return 0;
}

这里需要的是程序继续,直到用户继续输入字符y
但即使用户输入y,它也会在第一次迭代后退出。据我所知,之所以会发生这种情况,是因为当我键入y时,我还输入了一个新行,因此下次scanf将获取这个
换行符,而不是我键入的字符
避免这种情况的一种方法是在每次扫描后使用getchar(),这样它只会吃掉新行
字符。有更好的替代方案吗?

只需在要读取的字符前添加一个空格

scanf(" %c",&c);

将其放在之后可能会引起问题:scanf((格式字符串中尾随空白的效果是什么?(

编辑:回答你关于它为什么有效的问题。因为scanf就是这样构建的。在此页面中http://www.cplusplus.com/reference/cstdio/scanf/你可以阅读:

空白字符:函数将读取并忽略在下一个非空白字符之前遇到的任何空白字符(空白字符包括空格、换行符和制表符——请参阅isspace(格式字符串中的单个空白将验证从流中提取的任何数量的空白字符(不包括任何空白字符(

最新更新