C++: ifstream gebruiken met getline();

Controleer dit programma

ifstream filein("Hey.txt");
filein.getline(line,99);
cout<<line<<endl;
filein.getline(line,99);
cout<<line<<endl;
filein.close();

Het bestand Hey.txt bevat veel tekens. Ruim 1000

Maar mijn vraag is:
Waarom probeer ik de tweede keer een lijn af te drukken. Het wordt niet afgedrukt?


Antwoord 1, autoriteit 100%

Volgens de C++-referentie (hier) stelt getline de ios::fail wanneer count-1-tekens zijn geëxtraheerd. U zou filein.clear(); moeten aanroepen tussen de getline()-aanroepen.


Antwoord 2, autoriteit 92%

De idiomatische manier om regels uit een stream te lezen is als volgt:

std::ifstream filein("Hey.txt");
for (std::string line; std::getline(filein, line); ) 
{
    std::cout << line << std::endl;
}

Opmerkingen:

  • Geen close(). C++ zorgt voor resourcebeheer voor u wanneer het idiomatisch wordt gebruikt.

  • Gebruik de gratis std::getline, niet de streamlidfunctie.


Antwoord 3, autoriteit 17%

#include<iostream>
using namespace std;
int main() 
{
ifstream in;
string lastLine1;
string lastLine2;
in.open("input.txt");
while(in.good()){
    getline(in,lastLine1);
    getline(in,lastLine2);
}
in.close();
if(lastLine2=="")
    cout<<lastLine1<<endl;
else
    cout<<lastLine2<<endl;
return 0;
}

Antwoord 4, autoriteit 8%

Zoals Kerrek SB correct zei Er zijn 2 mogelijkheden:
1) Tweede regel is een lege regel
2) er is geen tweede regel en alle meer dan 1000 tekens staan ​​op één regel, dus de tweede getline heeft niets te krijgen.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Other episodes