Когда 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 начать сканирование ввода пользователя? В тот момент, когда персонаж введен? Или это буферизовано до завершения строки?

Ответы на вопрос(1)

Ваш ответ на вопрос