Ifstream.get 只读第一行

Ifstream.get reads only first line

我有以下程序

ifstream input;
input.open("File.txt",ios::in);
while(input){
    char arr[30];
    input.get(arr,30);
    cout << arr;
}

我的文件是

A 100
B 200

然而,我的输出只有第一行,即A 100。当我用 .getline 替换 .get 时,它按预期工作。

我做了一些 searching 并发现 .get\n 保留在流中,而 .getline 将其完全删除。

这就是我只收到第一行的原因吗?如果是,我该如何解决?

答案是肯定的。你已经发现了问题。读取 "A 100" 后,'\n' 仍将在流中。下一个 get 将不再读取 '\n' 和 return 一个空字符串。一次又一次。所以这永远行不通。

您可以使用 std::ignoreifstream::getline

不过,我会推荐 none。原因:你不应该,永远也永远不要在 C++ 中使用像 char arr[30]; 这样的 C 风格数组。从来没有。

只需使用 std:::string.

参见:

#include <iostream>
#include <fstream>
#include <string>


int main()
{
    std::ifstream input{ "r:\File.txt" };
    std::string line{};
    while (std::getline(input,line)) {
        std::cout << line << '\n';
    }
    return 0;
}