c ++读取文件中的双精度数,但如果程序遇到字符串则录制

时间:2014-02-10 00:23:33

标签: c++ fstream

好的,所以我的代码一切正常,但是有一个小问题,我有一个我想要读取的输入文件,有时一个数字被一个字母替换。该文件可能如下所示:

3.5
45.8
gh
67.34
39.5
sj
4.73

我想知道在我读完所有值后有两个号码丢失了。目前我的代码只是忽略了它们,好像它们不在那里。我试过这个:

double line;
int i = 0;
int j = 0;
while (myfile >> line) {
    if (myfile.fail()) {
        cout << "Error, line is not a number." << endl;
        j = j + 1;
    }
    mydata[i] = line;
    i = i + 1;
}

但代码没有打印错误消息!为什么不?谢谢。 (i计算数字,j应该计算错误数)

1 个答案:

答案 0 :(得分:2)

while (myfile >> line) 
{
    if (myfile.fail()) 
    {
        cout << "Error, line is not a number." << endl;
        j = j + 1;
    }
    mydata[i] = line;
    i = i + 1;
}

您的问题是第一行while (myfile >> line)在到达false行时会评估为gh,因此您的条件会被完全跳过。如果您想要计算错误,您的代码需要更像

std::string sLine;
while (std::getline(myfile, sLine)) 
{
    std::istringstream iss(sLine);
    if (!(iss >> line))
    {
        cout << "Error, line is not a number." << endl;
        ++j;
    }
    else
    {
        mydata[i] = line;
        ++i;
    }
}