首页 > 解决方案 > 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

标签: cgetchar

解决方案


在命令行中插入一个字符时,您实际上是在插入两个字符,即字符本身和换行符(\n),所以第一个getchar()获取字符,第二个getchar()获取换行符,所以它跳转到第三个getchar()

如果你只按下回车,你可以看到它只循环一次,因为回车只是一个换行符,你可以通过放置两个 getchar() 来解决这个问题,所以第二个捕获\n

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

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

case '\n': break;

推荐阅读