c - getchar() 函数获取 Enter 作为输入

标签 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()

如果只按 Enter 键,您可以看到它只循环一次,因为 Enter 只是一个换行符,您可以通过放置两个 getchar() 来解决此问题,因此第二个捕获 \n:

while(input != '!'){
  puts("Enter a char");
  input = getchar();
  getchar();
///...

或者在切换换行符时创建一个案例。

case '\n': break;

关于c - getchar() 函数获取 Enter 作为输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59880702/

相关文章:

c - 使用对 malloc 的单次调用为 C 89/90 中未知数据类型的二维数组动态分配连续的内存块

c - C 代码中的 Bash 命令

c - do while 循环中的 getchar()

linux - 重定向标准输入以完全不提供输入?

c - 从 stdin 读取字符串时遇到问题

c - 加法和乘法 C 语言

c - for 循环中的 sum 问题

c - 预响应参数 WTSSendMessage

有人可以解释一下为什么当我输入的字符串大小超过允许的字符串大小时我的 fgets 会跳行

c - getchar() 的行为对于该程序是否正确?