c - 当我删除 c = getchar() 部分时,为什么默认语句在案例之后起作用?
问题描述
当我删除 getchar 部分时,默认语句有效。
//第一个版本
int c;
while ((c = getchar()) != EOF){
switch(c){
case 'a': case 'A': printf("aaa"); break;
default: printf("invalid");
}
}
//第二个版本
int c;
while ((c = getchar()) != EOF){
switch(c){
case 'a': case 'A': printf("aaa"); break;
default: printf("invalid");
}
c = getchar();
}
在第一个版本中,当我输入 a 时,默认部分与(案例 a)一起工作,但是在第二个版本中,情况并非如此。这是为什么 ?
解决方案
当您重复使用 getchar() 获取输入时,您需要清除输入缓冲区以扫描另一个输入。
在您发布的第一个版本中,case:'a'
正常执行,当程序到达while循环结束时,它需要清除输入缓冲区。所以它自己执行一个扫描操作(通过扫描一个空输入)并再次进入循环。
您可以在 while 循环结束时轻松清理缓冲区:
int c;
while ((c = getchar()) != EOF){
switch(c){
case 'a': case 'A': printf("aaa"); break;
default: printf("invalid");
}
getchar(); // Clear input buffer in order to scan next input.
}
推荐阅读
- cordova - Cordova 插件结果未在第一次发送
- lisp - (1 2) 报错invalid function
- c - 如何设置源端口号。十进制形式
- php - 如何接收使用 guzzle 发送的 post 方法的响应
- graphql - 使用键以外的值执行获取查询
- java - 如何在不降低质量的情况下将位图转换为字节数组并返回?
- tensorflow - 在 Keras 模型中无法识别 input_shape
- c# - 不同项目模板的一般错误处理消息
- python - 尝试将包含非 ascii 字符的 csv 文件导入数据帧
- node-modules - 找不到 react-google-maps 模块:无法解析“react-google-maps/lib/places/SearchBox”