2012-05-11 25 views
9

Bu, döngüye yerleştirilen dizeyi yazdırmaz. Program sys/types.h başlık dosyası ile G ++ yardımıyla yazılmıştırÇıkarım çıktısı neden hemen görünmüyor?

for(int i=0;i<9;i++) 
{ 
    cout<<"||"; 
    sleep(1); 
} 
+0

'cout'u deneyin << "||" << endl; ' –

+0

Hata gönderebilir misiniz? –

cevap

7

Ne büyük olasılıkla burada görüyoruz tamponlu edilen çıktının bir etkisi de dahildir. Genel olarak, çıktı aslında std::endl kullanılıncaya kadar yazılmayacaktır. Kaputun std::endl altında

for(int i=0;i<9;i++) 
{ 
    // Flushes and adds a newline 
    cout<< "||" << endl; 
    sleep(1); 
} 

satır karakteri eklenerek ve daha sonra konsola çıktı zorlamak için std::flush kullanıyor. Aynı etkinleşir

for(int i=0;i<9;i++) 
{ 
    cout << "||" << flush; 
    sleep(1); 
} 
+3

Belki de endl'in hem bir satır sonu eklediğini ve hem de bir floş dediğimi kesinleştirmelisiniz. Bir '\ n' tek başına yeterli olmalıdır. – Klaim

+1

* Genel olarak çıktı, yeni bir satır yazdırılıncaya kadar ** yazılmayacak **. * .. Bu doğru değil. Bir satırsonu bu garantiyi vermez. Std :: endl'nin arabelleğe yeni bir satır eklediğine dikkat edin ** ve ** daha sonra temizleyin. – Nawaz

+1

std :: endl çalışmasının nedeni satır sonu öğelerinin (Windows için * nix, \ r \ n için \ n) ve bir std :: floş ekler. Anahtar bölüm std :: floş, ancak std :: endl kesinlikle çalışıyor. –

13

Sen çıkışını kızarma değiliz almak için doğrudan std::flush kullanabilirsiniz.

std::cout << "||" << std::flush; 
İlgili konular