11

あるファイルがあるとしましょう

100 text

ifstream を使用して 2 つの数値を読み取ろうとするとtext、数値ではないため失敗します。fscanf を使用すると、リターン コードをチェックすることで失敗したことがわかります。

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

しかし、stdio の代わりに iostream を使用している場合、それが失敗したことをどのように知ることができますか?

4

2 に答える 2

11

実際には(それ以上ではないにしても)単純です:

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

ちなみに、その形式に慣れてください。それは非常に便利だからです (さらに、ループを通して前向きな進行を続けるために)。

于 2013-01-18T08:07:28.997 に答える
6

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";
于 2016-05-13T01:17:13.757 に答える