2013-01-18 42 views
6

मान लीजिए कि मैं है किजांच करें कि सभी मूल्यों को सफलतापूर्वक एसटीडी से पढ़ा गया :: IStream

100 text 

अगर मैं पढ़ने ifstream का उपयोग कर 2 नंबर, यह विफल हो जाएगा क्योंकि text कोई अंक नहीं है की कोशिश एक फाइल करते हैं। fscanf का उपयोग करते हुए मैं पता चल जाएगा यह अपनी वापसी कोड की जाँच करके विफल रहा है: जब iostream stdio के बजाय का उपयोग कर

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

लेकिन, मैं यह विफल रहा है कैसे पता? वास्तव में के रूप में (न अधिक हो) सरल

उत्तर

11

इसकी:

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

वैसे, उस प्रारूप के लिए इस्तेमाल किया हो जाओ। क्योंकि यह में बहुत आसान है (यहां तक ​​कि सकारात्मक लूप के माध्यम से प्रगति जारी रखने के लिए भी अधिक)।

3

यदि एक '-std=c++11 या -std=c++14 साथ जीसीसी का उपयोग कर वह सामना कर सकते हैं:

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

क्यों? सी ++ 11 मानक bool ऑपरेटर स्पष्ट स्पष्ट (ref) बनाया गया।

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

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

व्यक्तिगत तौर पर मैं fail समारोह के उपयोग के नीचे पसंद करते हैं: इस प्रकार यह उपयोग करने के लिए आवश्यक है