2013-06-19 17 views
6

Ben sadece sınavlara revize ediyorum ve çevresinde başım alınamıyor bizim öğretim üyesi tarafından sağlanan aşağıdaki:Neden önce dosyayı okuyun ve kontrol edin?

açtığınız kontrol veya

  • Sonra önce okuyamaz, fstreams açılış Daha önce okunan onay Eğer bir ekstra istenmeyen girişi

ile sona erebilir, input_file.fail()

  • kontrol

    İlk önce okumam benim için mantıklı değil, önce sen kontrol etmemelisin? Herkes açıklar ise

    , ben

  • cevap

    10

    input_file.fail() herhangi önceki operasyonlar başarısız olursa, yaklaşan operasyon başarısız olacak olup olmadığını belirler :) çok minnettar olacaktır. Sonuç olarak, yazarsanız bu:

    if (!input_file.fail()) { 
        int value; 
        input_file >> value; 
    
        /* ... process value ... */ 
    } 
    

    Sonra value okuduktan sonra, aslında başarılı ya da değil bir şey okuyup okumadığını hiçbir fikrim yok. Tek bildiğiniz,'dan hemen önce okundu, her şey doğru çalışıyordu. Bir tamsayı okumada başarısız olmanız, ya dosyanın sonuna ulaşmanız ya da dosyadaki verilerin tam sayı olmaması nedeniyle mümkündür. Öte yandan

    , sen

    int value; 
    input_file >> value; 
    
    if (!input_file.fail()) { 
        /* ... process value ... */ 
    } 
    

    yazarsanız Sonra bir okuma yapmaya çabalamaktadırlar. Eğer başarılı olursa, okuduğunuz değeri işlersiniz. Aksi halde, son işlemin başarısız olduğu gerçeğine tepki verebilirsiniz.

    (Bundan daha bile şirin olabilir.

    birine okuma ve test işlemlerini birleştiren
    int value; 
    if (input_file >> value) { 
        /* ... process value ... */ 
    } 
    

    Size okuma başarılı teyit ediyoruz burada çok daha açık.)

    ise Eğer bir döngü içinde, bunu yapmak için çok temiz bir yoldur okur yapıyoruz

    for (int value; input_file >> value;) { 
        /* ... process value ... */ 
    } 
    

    Bu açıkça dosyadan okuma değerleri tutmak mümkün halindeyken döngü olduğunu.

    Bu yardımcı olur umarız!

    +0

    Evet! Hepsi mantıklı. Ve sonra başarısız olursa, açık dosya, hata mesajı vb vs? Teşekkür ederiz! – jewfro

    +0

    @ jewfro- Evet, kulağa doğru geliyor! – templatetypedef

    +0

    if ve loop'un kısayolları, çünkü >> >> operatörü akışa bir başvuru döndürür ve akıştaki "bool" işleci "başarısız" olarak adlandırır. –

    İlgili konular