C++ Ifstream.get仅读取第一行
我有以下程序C++ Ifstream.get仅读取第一行,c++,ifstream,C++,Ifstream,我有以下程序 ifstream input; input.open("File.txt",ios::in); while(input){ char arr[30]; input.get(arr,30); cout << arr; } 但是,我的输出只有第一行,即a100。当我将.get替换为.getline时,它会按预期工作 我做了一些工作,发现.get将\n保留在流中,而.getline将其全部删除 这就是为什么我只得到第一条线的原因吗?如果是,我如何修复
ifstream input;
input.open("File.txt",ios::in);
while(input){
char arr[30];
input.get(arr,30);
cout << arr;
}
但是,我的输出只有第一行,即a100
。当我将.get
替换为.getline
时,它会按预期工作
我做了一些工作,发现.get
将\n
保留在流中,而.getline
将其全部删除
这就是为什么我只得到第一条线的原因吗?如果是,我如何修复它?答案是肯定的。你已经发现了问题所在。读取“A 100”后,“\n”仍将在流中。下一个get将再次不读取“\n”并返回空字符串。一次又一次。所以这永远不会奏效 您可以使用
std::ignore
或ifstream::getline
不过,我不建议这样做。理由:你不应该,永远也永远不要使用C风格的aray,比如char-arr[30]。从来没有
只需使用std:::字符串
见:
#包括
#包括
#包括
int main()
{
std::ifstream输入{“r:\\File.txt”};
std::字符串行{};
while(std::getline(输入,行)){
STD::“当我替换时,GoString它会按预期工作。”-为什么不使用GETLIN?为什么不使用STD::String?@ NeLutButsValy Studio使用过时的C++版本:(你的学校还在使用像Turbo C++这样的20年前的编译器吗?<代码> STD::ISTHEAM::GETLION< /COD>和 STD::String 一直是C++ 98标准C++的一部分。”
A 100
B 200
#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;
}