несколько вызовов getchar - PullRequest
       5

несколько вызовов getchar

1 голос
/ 29 ноября 2011

У меня есть консольное приложение VS 10, которое должно принять два ввода символов и выполнить некоторую обработку на основе их значений. Я написал следующий код:

char c1,c2;
printf("Ener c1:");
c1 = getChar();
//Some desicion is made based on c1
printf("Ener c2:");
c2 = getChar();
//Some desicion is made based on c2

Запустите его с помощью:

Ener c1:y
Ener c2:S

После этого выполнения значение c1 равно 'y', а значение c2 равно '\n' Как это можно решить?

Ответы [ 2 ]

2 голосов
/ 29 ноября 2011

Когда вы получаете один символ из cin, пользователь технически нажимает символ: «y», затем ввод или «\ n».

\ n находится в буфере, поэтому вы должны очистить буфер после первого getchar, чтобы удалить \ n. Попробуйте использовать cin.ignore();

PS: я бы прочитал это вместо этого и переосмыслил, что вы делаете:

Как очистить буфер cin?

1 голос
/ 29 ноября 2011

Когда вы ввели 'y' и нажали Enter, ваше приложение получило 2 символа, оно получило 'y' и '\ n' (клавиша ввода. Простым решением было бы зацикливание, пока у вас не будет другой символ, кроме \ n или EOF:

while ((c2 = getchar()) != '\n' && c != EOF);
...