Как получить несколько запросов scanf или getchar в C? - PullRequest
0 голосов
/ 24 октября 2011

Я пытаюсь написать программу на C, но по какой-то причине я не могу использовать более одного запроса scanf или getchar.Я хочу, чтобы он выглядел примерно так:

"Please enter the first number:"
[user enters number]
"Please enter the second number:"
[user enters number]

Но в настоящее время он пропускает второе приглашение.Я использую простой

scanf ("% d", сначала),

и

scanf ("% d", второй).

Может кто-нибудь сказать мне, что я делаю не так?

Ответы [ 2 ]

1 голос
/ 24 октября 2011

Вы должны очистить буфер после первого scanf (), используя fflush (stdin). Или вы можете использовать getchar ().

Вы можете найти дальнейшие объяснения здесь: http://www.phanderson.com/C/scanf.html

0 голосов
/ 24 октября 2011

Проблема в том, что когда вы вводите первое значение в командной строке, вы фактически помещаете 2 буфера в буфер стандартного ввода: нужный вам символ и символ LF.

Общепринято, что вам лучше использовать fgets (char * s, int n, FILE * stream), где * stream - это stdin, * s - это массив символов, а n - это максимальное количество символов для чтения. , Это дает вам больше контроля над количеством прочитанных байтов, чтобы предотвратить ошибки переполнения. В этом случае это 2, потому что это символ, который вы хотите, плюс символ LF. Строки в C завершаются нулем, поэтому вам понадобится как минимум 3-байтовый массив для хранения одного символа. Чтобы получить доступ к одному нужному символу, просто прочитайте индекс 0 массива, который вы передали в fgets.

Ex:

char buffer[3];
fgets(buffer,2,stdin);
charyouwant = buffer[0];
...