прогамма на С. (do..while и write) (странная работа)

Модератор: Модераторы разделов

Аватара пользователя
spi
Сообщения: 10

прогамма на С. (do..while и write)

Сообщение spi »

Написал простецкий такой код:

Код: Выделить всё

#include <stdio.h>

int main (int argc, char **argv)
{
   int i = 0;
   char str[] = "string";
   write (1, "what's\n", 7);
   do {
      printf ("%s",str);
      i++;
   } while (i < 20);
   write (1, "wrong?\n", 7);
return 0;
}


После компиляции и запуска получаю вот такой вывод:

Код: Выделить всё

spi@testing:~/source/30032007$ gcc -o hz hz.c
spi@testing:~/source/30032007$ ./hz
what's
wrong?
stringstringstringstringstringstringstringstringstringstringstringstringstringst
ringstringstringstringstringstringstringstringstringstringstringstringstringstri
n
gstringstringstringstringstringstringstringstringstringstringstringstringstrings
t
ringstringstringstringstringstringstringstringstringstringstringstringstringstri
n
gstringstringstringstringstringstringstringstringstringstringstringstringstrings
t
ringstringstringstringstringstringstringstringstringstringstringstringstringstri
n
gstringstringstringstringstringstringstringstringstringstringstringstringstrings
t
ringstringstringstringstringstringspi@testing:~/source/30032007$


Но по идее ожидаю совсем другое! "wrong?" должен печататься в самом конце и завершать вывод. В чем ошибка?

spi@testing:~/source/30032007$ gcc -v
Reading specs from /usr/lib/gcc-lib/i486-linux/3.3.5/specs
Configured with: ../src/configure -v --enable-languages=c,c++,java,f77,pascal,objc,ada,treelang --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-gxx-include-dir=/usr/include/c++/3.3 --enable-shared --enable-__cxa_atexit --with-system-zlib --enable-nls --without-included-gettext --enable-clocale=gnu --enable-debug --enable-java-gc=boehm --enable-java-awt=xlib --enable-objc-gc i486-linux
Thread model: posix
gcc version 3.3.5 (Debian 1:3.3.5-13)
Спасибо сказали:
Аватара пользователя
Liksys
Сообщения: 2910

Re: прогамма на С. (do..while и write)

Сообщение Liksys »

Код: Выделить всё

#include <stdio.h>

int main (int argc, char **argv)
{
   int i = 0;
   char str[] = "string";
   write (1, "what's\n", 7);
   do {
      printf ("%s",str);
      fflush(stdout); // Сброс буффера
      i++;
   } while (i < 20);
   write (1, "wrong?\n", 7);
return 0;
}

Это из-за буферизации stdout. Просто сбрасывай буфер после каждого обновления такста.
Спасибо сказали: