2016-02-18 2 views
-1

Я хочу сделать FUNC похожа на Printf но сделать текст появляется медленно, с помощью дублера, один, чтобы напечатать символ и один, чтобы занять время:Медленно появляется Printf, в C99

char phrase[30]={"Printf random"}; 
    for(int a=0;a<=30;a++){ 
     printf("%c",phrase[a]); 
     for(int t=0;t<=1000000;t++){ 
      int f; 
      f++; 
     } 
    } 

, но когда я запускаю, сначала требуется несколько секунд (для второго для), а затем он печатает всю фразу.

Почему он не вводит второй за каждый раз, когда первый работает? Может быть, если программа впервые вычисляет второй, это не займет время, чтобы рассчитать его снова? как я могу это исправить?

+1

очистить буфер между циклами for. – 2501

+0

Ваш 'stdout' буферизуется. Вы должны установить его как небуферизованный или вы должны его очистить. – LPs

+0

Не выполняйте задержку с помощью цикла null-op. Изучите такие функции, как 'Sleep' или' nanosleep'. –

ответ

0

Прежде всего, в вашем коде, говоря

for(int a=0;a<=30;a++){  

вы вне по одному и вызывает undefined behavior. Это должно быть

for(int a=0;a<30;a++){ 

Таким образом, вам необходимо очистить выходной буфер, чтобы фактически отправить содержимое буфера в соответствующий файл. В противном случае стандартный вывод фактически буферизируется по строке, он не будет автоматически очищать содержимое. Все содержимое будет храниться в буфере, и когда программа закончит работу, все открытые буферы будут очищены, а затем весь контент появится вообще.

+0

Он, конечно, хочет только напечатать фактические символы, а не nul padding, поэтому элемент управления цикла должен, вероятно, быть 'for (int a = 0; phrase [a]; a ++) ...' –

-1

int f должно быть до второго цикла цикла. Вы создаете новую переменную f каждый раз в цикле и увеличиваете новую переменную.

В вашем случае это работает, поскольку в цикле нет других переменных. Поэтому каждый раз в цикле переменная f будет создана в том же месте памяти и имеет старое значение.

Это может не сработать, если у вас сложный цикл с несколькими условиями if.

Кроме того, как уже упоминалось другими, вам необходимо очистить выходы.

+0

Объем 'f' var всегда одинакова для петель 1000000 ... – LPs