Требуется уточнение в отношении getchar () и новой строки
У меня есть сомнения относительно использования getchar()
для чтения ввода символов пользователем.
char char1, char2; char1 = getchar(); char2 = getchar();
Мне нужно получить 2
символа в качестве вклада от пользователя. В этом случае, если пользователь вводит символ 'A'
за которым следует char2
, а затем символ 'B'
, что будет храниться в char2
– будет ли он символом новой строки или символом 'B'
?
Я попробовал это на CodeBlocks в Windows, и char2
фактически сохраняет символ новой строки, но я намеревался сохранить символ 'B'
.
- Почему getchar () не заставит меня нажать enter после scanf ()?
- int c = getchar ()?
- Как не нажимать enter с помощью getchar ()
- Я пытаюсь понять getchar ()! = EOF
- getc Vs getchar Vs Scanf для чтения символа из stdin
Я просто хочу знать, что такое ожидаемое поведение, и зависит ли он от компилятора? Если да, то какие различия существуют между турбинами C и mingW?
Да, вы должны потреблять новые строки после каждого ввода:
char1 = getchar(); getchar(); // To consume `\n` char2 = getchar(); getchar(); // To consume `\n`
Это не зависит от компилятора. Это справедливо для всех платформ, так как в конце каждой строки ввода будет возврат каретки (хотя фактический stream строк может варьироваться в зависимости от платформы).
Я просто хочу знать, что такое ожидаемое поведение, зависит ли он от зависимостей от компилятора?
Это ожидаемое поведение, а не зависящее от компилятора.
Вы можете использовать scanf
для чтения A, за которым следует новая строка, затем B, а затем новая строка. Если вы хотите придерживаться getchar()
, просто укажите ввод как AB
.
Вы можете предотвратить чтение новых строк, явно проверив его. Вместо простого использования
getchar():
вы можете использовать что-то вроде этого
while((char1 = getchar()) == '\n');
Если вы находитесь в windowsх, вы можете протестировать «\ r». Поэтому код немного меняется.
while((char1 = getchar()) == '\n' || char1 == '\r');
добавить инструкцию fflush(stdin);
между заявлениями. посмотри этот
ch1=getchar(); fflush(stdin); ch2=getchar();