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;
}