解析文件时输出错误?

时间:2014-07-06 13:30:34

标签: c++ visual-c++ file-io

我使用以下代码来解析文件。

std::string line;
std::ifstream infile("C:\\t50_20_1.td");

int num;
int pred;
int succ;

while (std::getline(infile, line))
{
    std::istringstream iss(line);
    while(iss >> num || !iss.eof()) {
        if(iss.fail()) {
            iss.clear();
            continue;
        } else {
            std::cout<<num<<std::endl;
        }
    }
    std::cin.ignore();
}

我正在尝试打印以下文件中的所有数字

50
1   35   11   3  13       10  5       11  2       19  1       21  10       23  2       26  3       29  6       35  5       42  10       44  5    
2   3   12   8  7       15  12       19  9       24  6       27  13       29  7       32  8       34  6       35  8       37  9       38  12       39  9    
3   19   7   4  15       8  2       10  7       15  12       21  11       26  9       36  10    
4   35   8   5  13       7  7       10  8       13  13       20  1       21  5       44  1       48  15    

但是当程序结束时,我只得到一个数字作为输出

50

1 个答案:

答案 0 :(得分:1)

我建议您删除!iss.eof()条件,因为在while循环中没有必要。必须按Enter键才能继续解析以下行。请参阅以下代码。另外,我建议你添加“using namespace std”,这意味着std ::必要时可以使代码更具可读性。最后,您声明的一些变量实际上并未使用,因此它们已从下面的代码中删除。

#include <fstream>
#include <iostream>
#include <sstream>

using namespace std;

int main (int argc, char ** argv)
{
    string line = "";
    ifstream infile("C:\\t50_20_1.td");
    int num = 0;

    while (getline(infile, line))
    {
        istringstream iss(line);
        while(iss >> num) {
            if(iss.fail()) {
                iss.clear();
                continue;
            } else {
                cout << num << endl;
            }
        }
        std::cin.ignore();
    }
    return 0;
}

样品输出(仅选择输出,所有数字均使用上述代码输出)

50
...
44
5
...
39
9
...
48
15