Когда scanf запускает и останавливает сканирование?
Похоже на тоscanf
начинает сканирование ввода, когдаВойти нажата клавиша, и я хочу проверить это с помощью приведенного ниже кода (я упростила проверку и обработку ошибок для простоты).
#include
int main(int argc, char **argv) {
/* disable buffering */
setvbuf(stdin, NULL, _IONBF, 0);
int number;
scanf("%d", &number);
printf("number: %d\n", number);
return 0;
}
Здесь возникает еще одна проблема: после того, как я отключаю буферизацию ввода (просто для проверки результата; я знаю, что в действительности я должен почти никогда этого не делать в случае, если это мешает результатам), вывод будет следующим (обратите внимание на дополнительное приглашение):
$ ./ionbf
12(space)(enter)
number: 12
$
$
который отличается от вывода, когда входная буферизация включена (без дополнительной подсказки):
$ ./iofbf
12(space)(enter)
number: 12
$
Кажется, символ новой строки используется, когда включен буфер. Я тестировал на двух разных машинах, одна с gcc 4.1.2 и bash 3.2.25, другая с gcc 4.4.4 и bash 4.1.5, и результат одинаков на обеих.
Проблемы:
Как объяснить различные варианты поведения, когда входная буферизация включена и отключена?Вернуться к исходной проблеме, когдаscanf
начать сканирование ввода пользователя? В тот момент, когда персонаж введен? Или это буферизовано до завершения строки?