Требуется разъяснение относительно getchar () и новой строки

У меня есть сомнения относительно использования getchar() читать ввод символов от пользователя.

char char1, char2;
char1 = getchar();
char2 = getchar();

мне нужно получить 2 символы в качестве входных данных от пользователя. В этом случае, если пользователь вводит символ 'A' с последующим newlineа затем персонаж 'B'что будет храниться в char2 — будет ли это символ новой строки или персонаж 'B'?

Я попробовал это на CodeBlocks на Windows, и char2 на самом деле хранит символ новой строки, но я намеревался сохранить символ 'B',

Я просто хочу знать, каково ожидаемое поведение и зависит ли оно от компилятора? Если да, то какие различия существуют между Turbo C и MingW?

4

Решение

Да, вы должны использовать новые строки после каждого ввода:

char1 = getchar();
getchar(); // To consume `\n`
char2 = getchar();
getchar(); // To consume `\n`

Это не зависит от компилятора. Это верно для всех платформ, так как в конце каждой строки ввода будет возврат каретки (хотя фактический перевод строки может отличаться для разных платформ).

6

Другие решения

Я просто хочу знать, каково ожидаемое поведение и зависит ли оно от компилятора?

Это ожидаемое поведение и не зависит от компилятора.

Ты можешь использовать scanf читать A с последующим переводом строки, затем B с последующим переводом строки. Если вы хотите придерживаться getchar(), а затем просто введите как AB,

0

Вы можете предотвратить чтение новых строк, явно протестировав их.
Вместо того, чтобы просто использовать

getchar():

Вы можете использовать что-то вроде этого

while((char1 = getchar()) == '\n');

Если вы работаете в Windows, возможно, вы захотите проверить и на ‘\ r’. Так что код немного меняется.

while((char1 = getchar()) == '\n' || char1 == '\r');
0

добавить заявление fflush(stdin); между заявлениями.
смотри это

ch1=getchar();

fflush(stdin);
ch2=getchar();
-1