c - getchar() 函数将输入作为输入
问题描述
在这里,我试图用 getchar(); 获取用户的输入。所以循环第一次运行良好,但第二次它没有得到输入并自动移动到第三次迭代。我认为换行符在这里做某事。如何解决?
#include<stdio.h>
void main(){
char input = ' ';
int v, c;
v=c=0;
while(input != '!'){
puts("Enter a char");
input = getchar();
switch(input){
case 'A':
case 'a':
case 'E':
case 'e':
case 'I':
case 'i':
case 'O':
case 'o':
case 'U':
case 'u':
v=v+1;
break;
default:
c = c+1;
}
}
if(v>c)
puts("Vowel wins.");
else if(c>v)
puts("Constant wins.");
else
puts("It's a tie.");
}
这里是编译器中的在线代码,大家可以直接自己运行,方便。 https://onlinegdb.com/HyEzo7w-I
解决方案
在命令行中插入一个字符时,您实际上是在插入两个字符,即字符本身和换行符(\n
),所以第一个getchar()
获取字符,第二个getchar()
获取换行符,所以它跳转到第三个getchar()
。
如果你只按下回车,你可以看到它只循环一次,因为回车只是一个换行符,你可以通过放置两个 getchar() 来解决这个问题,所以第二个捕获\n
:
while(input != '!'){
puts("Enter a char");
input = getchar();
getchar();
///...
或者在您切换换行符时创建一个案例。
case '\n': break;
推荐阅读
- typescript - 扩展一组函数以接受 Typescript 中的额外参数
- python - 如何在python中修复列表索引超出范围
- java - 为什么我可以更改类中的私有属性?
- go - 使用 nacl.Sign 并理解其 I/O 参数
- java - 如何将文件分隔符添加到 javax.servlet.http.Part.getSubmittedFileName
- c# - 使用 Microsoft.Azure.Cosmos 时如何获取已编译的查询
- django - Django导入基于值非模型字段添加多对多关系
- java - 找出输入中有多少相等对
- php - PHPMailer 使用 SMTP 身份验证发送电子邮件,但 Gmail 仍然声称它无法验证发件人
- node.js - 为什么我的反应网站模板不起作用