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!
Evet! Hepsi mantıklı. Ve sonra başarısız olursa, açık dosya, hata mesajı vb vs? Teşekkür ederiz! – jewfro
@ jewfro- Evet, kulağa doğru geliyor! – templatetypedef
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. –