У меня есть сомнения относительно использования getchar()
читать ввод символов от пользователя.
char char1, char2;
char1 = getchar();
char2 = getchar();
мне нужно получить 2
символы в качестве входных данных от пользователя. В этом случае, если пользователь вводит символ 'A'
с последующим newline
а затем персонаж 'B'
что будет храниться в char2
— будет ли это символ новой строки или персонаж 'B'
?
Я попробовал это на CodeBlocks на Windows, и char2
на самом деле хранит символ новой строки, но я намеревался сохранить символ 'B'
,
Я просто хочу знать, каково ожидаемое поведение и зависит ли оно от компилятора? Если да, то какие различия существуют между Turbo C и MingW?
Да, вы должны использовать новые строки после каждого ввода:
char1 = getchar();
getchar(); // To consume `\n`
char2 = getchar();
getchar(); // To consume `\n`
Это не зависит от компилятора. Это верно для всех платформ, так как в конце каждой строки ввода будет возврат каретки (хотя фактический перевод строки может отличаться для разных платформ).
Я просто хочу знать, каково ожидаемое поведение и зависит ли оно от компилятора?
Это ожидаемое поведение и не зависит от компилятора.
Ты можешь использовать 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();