c - 如何处理标准输入中的额外换行符
问题描述
考虑以下程序:
#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 之后简单地使用,这样它就会简单地吃掉换行符
。有没有更好的选择呢?
解决方案
只需在要阅读的字符前添加一个空格。
scanf(" %c",&c);
放在后面会出问题:scanf() 格式字符串中尾随空格有什么影响?)
编辑:回答你关于它为什么起作用的问题。好吧,因为这就是scanf
建造的方式。在此页面http://www.cplusplus.com/reference/cstdio/scanf/您可以阅读:
空白字符:该函数将读取并忽略在下一个非空白字符之前遇到的任何空白字符(空白字符包括空格、换行符和制表符——参见 isspace)。格式字符串中的单个空格验证从流中提取的任意数量的空格字符(包括无)。
推荐阅读
- javascript - 如何用 next js 和 redux 实现认证
- javascript - 存储来自嵌套回调函数的响应
- c++ - 无法将 Microsoft Detours 添加到项目(编译错误)
- match - 想知道如何匹配某个字符串 - tcl regexp
- python - 如何将列表中的元素复制到新列表中 [Python 3]
- java - 在 while 循环后打印名称
- android - 使用 Groupie 库在带有 Firestore 的 Android 中创建嵌套的 ExpandableGroup
- python - Pytest - 收集了 0 个项目,没有进行测试
- azure - 需要 Azure 机器学习管道帮助
- python - 我正在 python 上制作一个程序来检测用户是否戴着口罩?