Функция getchar () получает вход в качестве ввода - PullRequest
0 голосов
/ 23 января 2020

Здесь я пытаюсь получить ввод пользователя с помощью getchar (); таким образом, l oop работает нормально в первый раз, но во второй раз он не получает ввод и автоматически переходит на 3-ю итерацию. Я думаю, что новая строка делает что-то здесь. Как это можно решить?

#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

1 Ответ

1 голос
/ 23 января 2020

При вставке символа в командной строке вы действительно вставляете два символа, это сам символ и символ новой строки (\n), поэтому первый getchar() получает символ, а второй getchar() получает символ новой строки, поэтому он переходит на третий getchar().

Если вы нажмете только ввод, вы увидите, что он циклически повторяется только один раз, так как ввод - только один символ новой строки, вы можете решить эту проблему, поставив два getchar (), так что второй перехватывает \n:

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

Или создайте регистр при переключении на символ новой строки.

case '\n': break;
...