比方說,我有一個具有檢查是否已成功地從STD讀取所有值:: istream的
100 text
如果我嘗試閱讀使用ifstream的2號,它會失敗,因爲text
不是一個數字的文件。使用的fscanf我就知道它通過檢查它的返回碼失敗:使用的,而不是標準輸入輸出的iostream時
if (2 != fscanf(f, "%d %d", &a, &b))
printf("failed");
但是,我怎麼知道會失敗?
比方說,我有一個具有檢查是否已成功地從STD讀取所有值:: istream的
100 text
如果我嘗試閱讀使用ifstream的2號,它會失敗,因爲text
不是一個數字的文件。使用的fscanf我就知道它通過檢查它的返回碼失敗:使用的,而不是標準輸入輸出的iostream時
if (2 != fscanf(f, "%d %d", &a, &b))
printf("failed");
但是,我怎麼知道會失敗?
它實際上是(如果不是更多)簡單:
ifstream ifs(filename);
int a, b;
if (!(ifs >> a >> b))
cerr << "failed";
習慣了這種格式,順便說一句。因爲它在非常方便(甚至更多 - 所以繼續積極通過循環進展)。
如果一個人使用GCC與-std=c++11
或-std=c++14
她可能會遇到:
error: cannot convert ‘std::istream {aka std::basic_istream<char>}’ to ‘bool’
爲什麼? C++ 11標準bool
運算符調用顯式(ref)。因此,有必要使用:
std::ifstream ifs(filename);
int a, b;
if (!std::static_cast<bool>(ifs >> a >> b))
cerr << "failed";
我個人更喜歡使用以下功能fail
的:
std::ifstream ifs(filename);
int a, b;
ifs >> a >> b
if (ifs.fail())
cerr << "failed";