У меня возникло много проблем, пытаясь выяснить, как использовать scanf()
. Кажется, что он отлично работает с целыми числами, будучи довольно прямолинейным scanf("%d", &i)
.Разбор ввода с scanf в C
Где я сталкиваюсь с проблемами, используется scanf()
в циклах, пытаясь прочитать ввод. Например:
do {
printf("counter: %d: ", counter);
scanf("%c %c%d", &command, &prefix, &input);
} while (command != 'q');
Когда я вхожу в валидном структурированном вводе как
c P101
, кажется, цикл снова перед побуждая меня. Это, похоже, происходит даже с одним:scanf("%c", &c)
в цикле while. Он повторит цикл дважды, прежде чем снова спросить меня. Что делает его циклом дважды, и как его остановить?
Когда я вхожу в меньшее количество входных данных, которые программным образом не будут иметь другого символа или номера, например
q
, нажав enter, я попрошу ввести еще раз. Как мне получитьscanf()
для обработки как одиночных, так и двойных символов?
Очень хорошее объяснение, я подозревал, что он должен читать \ n, но это, безусловно, усложняло то, что я считал простым анализом. Я посмотрю на fgets и sscanf(). – zxcv
Не могли бы вы добавить абзац о проверке возвращаемого значения из 'scanf()', чтобы убедиться, что вы получили то, что ожидали. Если вы не знаете более раннего вопроса, это, скорее всего, станет каноническим Q & A для этой проблемы, но канонический ответ должен охватывать все разумные моменты, и я думаю, что возвращение из 'scanf()' является разумной точкой.Сделайте комментарий, направленный на меня, когда вы это сделаете; Затем я удалю этот комментарий и поставлю комментарий для удаления (или вы можете отметить это как устаревшее, но я хотел бы знать, что вы внесли изменения). Благодарю. –