Функция sleep не даёт выводить данные, почему так?

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

Аватара пользователя
жучара
Сообщения: 116
ОС: minix 3.1.0

Функция sleep не даёт выводить данные, почему так?

Сообщение жучара » 09.04.2018 21:17

Друзья! Это, может, глюк у меня такой?

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

#include <stdio.h>
int main (void)
{  
        
   while (1)
   {    
      printf ("=== ");
      sleep (1);
   }
   return 0;
} 
экран будет пустым! Почему-то sleep (1); не даёт вывести строку ===

А вот так выводит:

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

#include <stdio.h> 
int main (void)
{  
   while (1)
   {    
      printf ("=== ");
      fflush (stdout);
      sleep (1);
   }
   return 0;
} 
Также выводит строку, если в ней будет символ переходя на другую строку, то есть "===\n"

Но всё равно непонятно поведение sleep. man sleep ничего не даёт, естессно. Спасибо, кто откликнется.
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 13610
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Функция sleep не даёт выводить данные, почему так?

Сообщение Bizdelnick » 09.04.2018 21:22

А с чего Вы взяли, что дело в sleep()? printf() — функция буферизованного вывода, если stdout — терминал, то выводится текст построчно.
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
команда
новичок
нюанс
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
devilr
Сообщения: 1190
ОС: Mandriva => Gentoo (~amd64)

Re: Функция sleep не даёт выводить данные, почему так?

Сообщение devilr » 09.04.2018 21:26

К тому же неплохо бы добавить
#include <unistd.h>
в случае linux
и
#include <windows.h>
в случае винды
Мудрость приходит с возрастом.
Иногда возраст приходит один.
Спасибо сказали:

Аватара пользователя
жучара
Сообщения: 116
ОС: minix 3.1.0

Re: Функция sleep не даёт выводить данные, почему так?

Сообщение жучара » 09.04.2018 21:56

Bizdelnick писал:
09.04.2018 21:22
А с чего Вы взяли, что дело в sleep()? printf() — функция буферизованного вывода, если stdout — терминал, то выводится текст построчно.
Он не выводится.

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

/*main.c*/
#include <stdio.h> 
int main (void)
{  
   while (1)
   {    
      printf ("=== ");
      sleep (1);
   }
   return 0;
}

Shell

user@astra:~/Desktop$ gcc main.c
user@astra:~/Desktop$ ./a.out
Спасибо сказали:

NickLion
Сообщения: 3330
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Функция sleep не даёт выводить данные, почему так?

Сообщение NickLion » 09.04.2018 21:57

жучара
потому что строка ещё не сформирована, строка сформирована, когда будет \n.
Спасибо сказали:

Аватара пользователя
devilr
Сообщения: 1190
ОС: Mandriva => Gentoo (~amd64)

Re: Функция sleep не даёт выводить данные, почему так?

Сообщение devilr » 09.04.2018 22:08

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

#include <stdio.h>

#ifdef _WIN32
#include <windows.h>
#else
#include <unistd.h>
#endif

int main (void)
{  
    int n= 0;

    while (1)
    {
        if(n < 10)
        {
            n++;
        }
        else
        {
            n=0;
            printf("\n");
        }
        printf ("=== ");
        sleep (1);
    }
    return 0;
} 
Мудрость приходит с возрастом.
Иногда возраст приходит один.
Спасибо сказали:

MiK13
Сообщения: 584
ОС: Windows XP

Re: Функция sleep не даёт выводить данные, почему так?

Сообщение MiK13 » 06.05.2018 14:03

NickLion писал:
09.04.2018 21:57
жучара
потому что строка ещё не сформирована, строка сформирована, когда будет \n.
Или заполнится буфер.
Опытным путём проверил, что размер буфера -- 1024 байта. У меня на Debian 8 amd64.
Возможно на другой системе он может иметь другой размер
Спасибо сказали:

Вернуться в «Программирование для начинающих»