如何处理标准输入中的额外换行符

How to handle the extra newline character in 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 将获取这个
换行符而不是我输入的字符输入。
避免这种情况的一种方法是在每次 scanf 之后简单地使用 getchar(),这样它就可以简单地吃掉新行
字符。有没有更好的替代品?

只需在要阅读的字符前添加一个space即可。

scanf(" %c",&c);

放在之后会引起麻烦:What is the effect of trailing white space in a scanf() format string?)

编辑:回答你关于它为什么有效的问题。好吧,因为这就是 scanf 的构建方式。在本页http://www.cplusplus.com/reference/cstdio/scanf/您可以阅读:

白色space字符:该函数将读取并忽略在下一个非白色space字符之前遇到的任何白色space字符(白色 space 字符包括 spaces、换行符和制表符——参见 isspace)。 格式字符串中的单个白色space验证从流中提取的任意数量的白色space字符(包括none)。