2013-08-06 2 views
-5
int main() 
{ 
    printf("main started"); 
    for(;;) {} 
    return 0; 
} 

Проблема заключается в том, что он не печатает "main started". Не имеет значения, что находится в цикле и сколько операторов существует до цикла.что является исключением в этом коде

+2

Выход буферизирован. – lurker

+1

Просьба предоставить более подробную информацию. Какой компилятор вы используете и на какой платформе вы работаете? – Kelm

+3

C или C++? Выбери один. –

ответ

2

Поместите новую строку в конец вывода. Без него текст переходит в выходной буфер, но не очищается.

+1

Или запустите его с помощью 'fflush (stdout)' – JustSid

+2

Новая линия не гарантирует промывку. –

+0

thnx ... он работает с "\ n", но я до сих пор не понял. он будет работать нормально, но не работает, если цикл forever ПОСЛЕ –

2

Вы должны удалить вывод:

fflush(stdout); 

Или, завершает строку по \n характера, как большинство систем имеют линии буферном стандартный вывод.

1

printf печатает строку только после промывки. Он автоматически удаляет данные, если вы добавите символ \n (новая строка) в строку (хотя он обычно работает, нет гарантии! Не полагайтесь на него). Данные также автоматически сбрасываются, когда программа заканчивается - после возврата из основной функции или вызова exit.

В вашем случае программа никогда не закончится из-за цикл без условия, AutoFlush никогда не вызывается в результате

Если вы хотите, чтобы очистить его в любом случае вы можете заставить себя смывать вызова fflush(stdout). Эта же функция вызывается автоматически при выходе.

См. Аналогичный вопрос, который я задал ранее о стандартных гарантиях на авто-флеш. Is there a guarantee of stdout auto-flush before exit? How does it work?

1

То, что вы печатаете с printf(), сохраняется в буфере. Это означает, что он не сразу отправляется на консоль. Тем не менее, этот буфер сбрасывается:

  • при печати новой строки (\n),
  • если вы попросите флеш,
  • или когда буфер переполняется, и получает покраснел автоматически.

Таким образом, в вашем случае, чтобы увидеть его сразу, добавьте fflush(stdout), или сделать printf("main started\n").