fscanf читает символ новой строки - PullRequest
0 голосов
/ 15 сентября 2011

Я медленно отслеживаю свою ошибку для своей программы.Я сузил это к этому.У меня есть пользовательский ввод

fscanf(stdin, "%c %c %d", &car, &dir, &amount);

при первом обращении к нему он работает нормально, правильно считывая значения.Во второй раз в цикле он читает \n в машину вместо символа, который я ему даю.затем он читает то, что должно было быть в машине, в каталог.сумма читается правильно.Поскольку машина передается другим функциям для подсчета, я в конечном итоге получаю сегфо.

Это чтение в \ n из предыдущей строки или что-то в этом роде?

1 Ответ

1 голос
/ 15 сентября 2011

Спецификатор преобразования "%c" не выполняет обычное усечение пробелов.
Попробуйте добавить пробел перед первым спецификатором преобразования

if (fscanf(stdin, " %c %c %d", &var, &dir, &amount) != 3) { /* error */ }

Или, может быть, лучше прочитать полную строку и проанализировать ее в вашей программе

char buf[1000];
fgets(buf, sizeof buf, stdin);
parse(buf);
...