2013-01-18 17 views
6

en ı text bir sayı değil çünkü ifstream kullanılarak 2 sayı, başarısız olur okuma çalışırsanızKontrol :: istream

100 text 

olan bir dosya var diyelim. fscanf kullanarak ben onun dönüş kodu kontrol ederek başarısız bileceksiniz: yerine stdio ait iostream kullanırken

if (2 != fscanf(f, "%d %d", &a, &b)) 
    printf("failed"); 

Ama başarısız nasıl anlarım? Aslında basit (en fazla ise) olarak

cevap

11

Onun:

ifstream ifs(filename); 
int a, b; 
if (!(ifs >> a >> b)) 
    cerr << "failed"; 

arada, bu biçimdeki alışın. numaralı çok modelinde olduğu gibi (pozitif döngüsünü devam ettirmek için daha fazla).

3

-std=c++11 veya -std=c++14 ile GCC kullanarak bir' o karşılaşabilir ise:

error: cannot convert ‘std::istream {aka std::basic_istream<char>}’ to ‘bool’ 

Neden? C++ 11 standardı, bool numaralı operatör çağrısını açık (ref) açıkladı.

std::ifstream ifs(filename); 
int a, b; 
ifs >> a >> b 
if (ifs.fail()) 
    cerr << "failed"; 
: Şahsen

std::ifstream ifs(filename); 
int a, b; 
if (!std::static_cast<bool>(ifs >> a >> b)) 
    cerr << "failed"; 

Ben fail fonksiyonunun kullanımı aşağıda tercih: Böylece kullanmak gereklidir