Я изучаю программирование в C
. Не могли бы вы объяснить, почему здесь ничего не печатается? Заранее спасибо.Почему «printf» не работает?
#include <stdio.h>
int main (void)
{
char a[]="abcde";
printf ("%s", a);
}
Я изучаю программирование в C
. Не могли бы вы объяснить, почему здесь ничего не печатается? Заранее спасибо.Почему «printf» не работает?
#include <stdio.h>
int main (void)
{
char a[]="abcde";
printf ("%s", a);
}
Во многих системах printf
в буфер, то есть при вызове printf
выход помещается в буфер, вместо того, чтобы быть напечатан немедленно. Буфер будет сброшен (иначе он будет напечатан) при печати новой строки \n
.
Во всех системах ваша программа будет печататься, несмотря на отсутствие \n
, поскольку буфер сбрасывается, когда заканчивается ваша программа.
Обычно вы бы еще добавить \n
как:
printf ("%s\n", a);
Альтернативный способ получить выход сразу является вызов fflush
для очистки буфера. От человека страницы:
Для выходных потоков, fflush() заставляет запись всех пользовательского пространства буферизованных данных для заданного выхода или потока обновлений через , лежащей в основе функции записи ручья.
Источник: http://man7.org/linux/man-pages/man3/fflush.3.html
EDIT
Как отметил @Barmar и цитируемый @Alter Манна требуется, чтобы буфер очищается, когда программа закончится.
Цитата @Alter Манна:
Если основная функция возвращается к своему первоначальному абоненту, или если функция выхода называется, все открытые файлы закрываются (следовательно, все выходные потоки очищаются) до окончания программы ,
C системы ** необходимы ** для выключения вывода при завершении программы. – Barmar
@Barmar, хорошая точка: _ Если основная функция возвращается к исходному вызывающему абоненту или если вызывается функция выхода, все открытые файлы закрываются (следовательно, все выходные потоки очищаются) до завершения программы. Но в этом случае нет вызов 'exit()' или 'return', может ли это быть причиной проблемы? –
@AlterMann Завершение функции приводит к возврату ее вызывающему абоненту. – Barmar
Добавить "\ п" к строке или формата. - >> 'printf ("% s \ n ", a);' – wildplasser
почему он не печатает? –
Или 'fflush (stdout);' after 'printf' –