На что вы смотрите, так это строковый буферизированный вывод .На самом деле запись в вывод - дорогостоящая операция, поэтому потоки ввода / вывода обычно буферизуются .На самом деле запись в буфер откладывается до тех пор, пока не встретится конкретное событие.В стандарте C у вас есть три типа буферизации:
- полностью буферизирован - буфер записывается при заполнении.
- строка буферизируется - буфер пишется при встрече новой строкиcase).
- unbuffered - буфер записывается всякий раз, когда выполняется функция ввода / вывода.(Хорошо для регистрации ошибок.)
Запись в буфер называется flushing .Вот почему есть функция stdio, которая называется fflush()
.Вы также можете проверить setvbuf()
и его константы параметров, _IOFBF
, _IOLBF
и _IONBF
.Я уверен, что вы можете понять, что они означают без поиска их.; -)
Редактировать: Эта программа работает так, как вы и ожидали:
#include <stdio.h>
// This is the header where sleep() is declared. Don't go without it.
#include <unistd.h>
int main()
{
int i=0;
// setvbuf() can be called on a stream only BEFORE
// you do any I/O on it!
setvbuf( stdout, NULL, _IONBF, 0 );
printf( "*********Testing Sleep***********\n" );
for ( i = 0; i < 10; ++i )
{
printf( "%d", i );
sleep( 1 );
}
return 0;
}