Pętla for - przerobienie drugiej wersji kodu, aby działała tak jak pierwsza

0
int main ()
{
    for( int i = 0 ; i < 5 ; i++) // zapetlanie 
    {
        int poziom = 5;
        int przesun_1 = 10;
        int przesun_2 = 40;
        poziom++;
        printf("%d \n" , i );
        sleep(2);
    }

    return 0;
}
int main ()
{
    for( int i = 0 ; i < 5 ; i++) // zapetlanie 
    {
        int poziom = 5;
        int przesun_1 = 10;
        int przesun_2 = 40;
        poziom++;
        printf("%d " , i );
        sleep(2);
    }

    return 0;
}

Dlaczego pierwszym program wypisuje wartośći na bieżąco, a drugi wypisze wszystkie wartości na raz, na sam koniec programu ? Jak sprawić, aby druga wersja działała tak jak pierwsza bez dodawania \n?

1

To jest wynik optymalizacji operacji IO.
Bezpośredni wielokrotny zapis małych danych do strumienia jest kosztowny, więc standardowa biblioteka próbuje akumulować dane w buforze zanim faktycznie zapisze je do strumienia danych.
Standardowe wyjście (stdout) jest tak zrobione, że znak końca linii wymusza opróżnienia bufora i zapis danych.
dodaj do pętli: fflush(stdout); by wymusić opróżnienie bufora http://www.cplusplus.com/reference/cstdio/fflush/

1 użytkowników online, w tym zalogowanych: 0, gości: 1