c - 在接受用户输入时,我们如何在 c 编程中忽略按回车键作为字符?
问题描述
看例子:
#include<stdio.h>
int main()
{
char ch;
while(scanf("%c", &ch))
{
if(ch == 'a' || ch == 'e' || ch == 'i' ||
ch == 'o' || ch == 'u' || ch == 'A' ||
ch == 'E' || ch == 'I' || ch == 'O' ||
ch == 'U')
{
printf("It's Vowel\n");
}
else if((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'))
{
printf("It's Consonant\n");
}
else
{
printf("Wrong Input/ It's not Alphabet\n");
}
}
return 0;
}
编译此示例代码后,当我输入“a”时,输出为“It's Vowel”和“Wrong Input/It's not Alphabet”。我认为导致此输出的原因是,编译器将字符也视为字符。
有没有办法解决这个问题?
解决方案
我认为导致此输出的原因是,编译器将字符也视为字符。
接受字符的不是编译器。获取输入是一个运行时操作。当程序已经运行时,编译器的工作已经完成,但除此之外,您的猜测是正确的。这是因为在第一步scanf()
中不使用按制作的换行符。Enter
这个换行符然后在下一次迭代中被读取,scanf("%c", &ch))
因为换行符是一个合法的字符,它存储在ch
.
有没有办法解决这个问题?
利用
while(scanf(" %c", &ch))
代替
while(scanf("%c", &ch))
注意前面的空白字符 ( ' '
) %c
。stdin
这将获取上次迭代中留下的废弃换行符。
推荐阅读
- python - Pygame在循环中填充背景时闪烁
- nginx - Nginx 导致 chrome 的“ERR_CONTENT_LENGTH_MISMATCH”和 wget 的“解码接收到的 TLS 数据包时出错。”
- android - 在 Kotlin 中向 recyclerview 添加不同的时间表
- elasticsearch - 最大总和查询不适用于弹性搜索
- xcode - Xcode 内存编辑器
- php - Laravel 中不存在目标类 [App\Http\Controllers\X]
- html - 动画汉堡切换按钮无法正常工作
- node.js - Laravel Mix: npm run dev 和 npm run watch error-> configuration.loader 应该是一个对象
- php - 在视图中使用 baseController 中的对象变量时出现错误
- kubernetes - 没有钩子的 kubernetes preStop 优雅关闭超时