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::ignore
或 ifstream::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;
}
我有以下程序
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::ignore
或 ifstream::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;
}