2015-07-28 11 views
6

C++ astar kitabı aşağıdaki ve aşağıdaki kod örneği merak var am:İkinci koşul (cin >> buf &&! Buf.empty()) gereksiz mi?

string buf; 
while (cin >> buf && !buf.empty()) { 
    if (buf[0] != '_') 
     continue; // get another input 
     //the input starts with an underscore; process buf . . . 
} 

döngü bir alt çizgi ile başlar ve bir alt çizgi ile başlar olanlarla şey yapmazsak kelimeleri yoksaymalıdır .

Sorum

(cin >> buf && !buf.empty()) 

Ben durum (! Buf.empty()) (cin >> buf) gerçek her zaman doğrudur, bu yüzden görmüyorum söyleyebilirim durumu hakkında ise Ekleme noktası. İkinci koşul gereksiz olmadığında herhangi bir durum var mı?

cevabı benzer bir yapı (Is it possible to read an empty string from cin and still get true from cin.good()?) hakkında yığın taşması üzerine bir önceki soru basitçe hiçbir yok, değil mi (ikinci koşul gereksiz).

Eğer bu doğruysa, neden kitapta var? Bu sadece bir hatadır? Ya da çift durumun anlamlı olduğu özel bir durum var mı?

+1

Iyi bağlantılı soruya göre (Langer, 1999 Kreft) ayarlanır , ikinci koşul gereksizdir. Aslında, sorunuz neredeyse bunun bir kopyası gibi görünüyor. –

+0

O zaman kitapta olmak çok garip. Bu yapının faydalı olduğu bazı özel durumlar var gibi görünüyor. –

+1

Bu koşul hiç gerekli değil. Yazıcınız, std :: operator >> (std :: istream &, std :: string &) 'hata koşulları hakkında yanılıyor. – 0x499602D2

cevap

1

sadece açık olmak gerekirse, operatör bool() is badbit || "Bir giriş işlemi beklenen charchter veya operasyonun diğer her türlü istenilen sonucu elde edilememişti okunamadı" ne zaman failbit ve failbit

string buf; 
while ((cin >> buf,cin.operator bool()) && !buf.empty()) { 
    if (buf[0] != '_') 
     continue; // get another input 
     //the input starts with an underscore; process buf . . . 
} 
İlgili konular