Требуется уточнение в отношении getchar () и новой строки

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

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

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

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

Я просто хочу знать, что такое ожидаемое поведение, и зависит ли он от компилятора? Если да, то какие различия существуют между турбинами 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(); 
Давайте будем гением компьютера.