Я заканчивал упражнения K & R 7.4 и 7.5 и наткнулся на досадную «особенность», в которую я не верю стандартным состояниям.
Согласно K & R, способ действия для спецификации преобразования "% c "
" Следующие входные символы (по умолчанию 1) размещаются в указанном месте. Нормальный пропуск по пробелам подавлен; для чтения следующего непробельного символа,использовать% 1s "
Мой вопрос заключается в том, должен ли этот оператор читаться следующим образом:
" Следующие входные символы (по умолчанию 1)помещаются в указанное место. THEN, при последовательных вызовах scanf, при которых снова используется% c , нормальный пропуск по пробелу подавляется; для чтения следующего непробельного символа используйте% 1s"
... потому что этот код:
void test1()
{
char t1, t2;
scanf("%c %c", &t1, &t2);
printf("%d\n", t1);
printf("%d\n", t2);
//INPUT is: "b d" (without quotes)
}
приводит к t1 = 98 (b) и t2 = 100 (d).(Пробелы пропущены)
Однако этот код:
void test2()
{
char t1, t2;
scanf("%c", &t1);
scanf("%c", &t2);
printf("%d\n", t1);
printf("%d\n", t2);
//INPUT is: "b d" (without quotes)
}
приводит к t1 = 98 (b) и t2 = 32 ('').(Пробельные символы NOT пропущены)
Читая оригинальную цитату, я думаю, что любой разумный человек будет понимать, что во время того же вызова scanf (% c) пропуск пропуска пропускается.Однако, похоже, что это не так.
Кажется, что для того, чтобы вернуть исходную функциональность, нужно полностью очистить стандартный ввод.
Это должно сработатьпуть?Это было задокументировано?Потому что я осмотрелся и не увидел много информации об этом.
Для справки, я программирую на C99.