27

私はC++を初めて使用し、コードにエラーチェックを追加したいのですが、適切なコーディング手法を使用していることを確認したいと思います。以下を使用して、ASCIIファイルから文字列に行を読み取ります。

ifstream paramFile;
string tmp;

//open input file

tmp.clear();

paramFile >> tmp;

//parse tmp
  1. 入力ファイルの読み取りが成功したことを確認するためにエラーチェックを行うにはどうすればよいですか?

  2. 私はそこにASCIIファイルから読み取るはるかに複雑な方法を見ています。私のやり方は「安全/堅牢」ですか?

4

1 に答える 1

21

paramFile >> tmp;行にスペースが含まれている場合、これは行全体を読み取りません。std::getline(paramFile, tmp);改行まで読み取るその使用が必要な場合。基本的なエラーチェックは、戻り値を調べることによって行われます。例えば:

if(paramFile>>tmp) // or if(std::getline(paramFile, tmp))
{
    std::cout << "Successful!";
}
else
{
    std::cout << "fail";
}

operator>>両方ともstd::getlineストリームへの参照を返します。ストリームはブール値に評価され、読み取り操作後に確認できます。上記の例は、読み取りが成功した場合にのみtrueと評価されます。

これが私があなたのコードを作る方法の例です:

ifstream paramFile("somefile.txt"); // Use the constructor rather than `open`
if (paramFile) // Verify that the file was open successfully
{
    string tmp; // Construct a string to hold the line
    while(std::getline(paramFile, tmp)) // Read file line by line
    {
         // Read was successful so do something with the line
    }
}
else
{
     cerr << "File could not be opened!\n"; // Report error
     cerr << "Error code: " << strerror(errno); // Get some info as to why
}
于 2012-11-19T01:58:04.970 に答える