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.