首页 > 解决方案 > 如何处理标准输入中的额外换行符

问题描述

考虑以下程序:

#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 之后简单地使用,这样它就会简单地吃掉换行符
。有没有更好的选择呢?

标签: cscanf

解决方案


只需在要阅读的字符添加一个空格。

scanf(" %c",&c);

放在后面会出问题:scanf() 格式字符串中尾随空格有什么影响?)

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

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


推荐阅读