为什么 getline() 不读取文本文件中的所有内容?

Why is getline() not reading all content in text file?

我正在使用 ifstreamgetline 来读取整数文本文件中的所有输入。输入被构造为邻接矩阵。现在我无法读取每行中第一个 space 之后的剩余数字。

** 我试过示例输入并确认它只打印每行中的第一个数字 (row[0...n], col[0])。

示例输入:

0 1 0
1 0 1
0 1 0

示例输出:

0
1
0

这里是源代码:

    // Prompt user for input
    cout <<"\nEnter filename: ";
    cin >> fileName;
    cout << "Enter a start vertex: ";
    cin >> startVertex;

    // Assume max size is 25 vertices
    pointer = new int[25];

    // Fill pointer with contents
    ifstream newFile(fileName);
    int x = 0;
    while(getline(newFile, fileName)){
        pointer[x] = stoi(fileName); //cast string to int
        x++;
    }
    newFile.close();

    cout << "Count = " << count << endl; //Test counter

    for (int i = 0; i < x; i++){
        cout << pointer[i] << " " << endl; // Test pointer contents
    }

std::getline() 读取整行输入,例如它读取 "0 1 0"(第一行)。

然后 std::stoi 的(有点令人惊讶的)行为开始发挥作用:

Discards any whitespace characters (as identified by calling isspace()) until the first non-whitespace character is found, then takes as many characters as possible to form a valid base-n (where n=base) integer number representation and converts them to an integer value. The valid integer value consists of the following parts:

这意味着,stoi 只解析第一个数字 0 和 returns 它。因此,您只解析每行的第一个数字。

您需要按元素而不是按行读取文件:

ifstream newFile(fileName);
int val;
int x = 0;
while(newFile >> val){
    pointer[x] = val;
    x++;
}
newFile.close();

作为一个不相关的补充:想想当文件包含超过 25 个条目时会发生什么。考虑使用 std::vector 而不是普通数组。