17.5.2 Rivi
kerrallaan lukeminen
Ongelmaa
voidaan osittain ratkaista lukemalla tiedostoa merkkijonoon aina rivi kerrallaan:
ifstream(fi); string rivi; char nimike[20]; double hinta; int kpl;
...
while ( getline(fi,rivi) ) {
if ( rivi <= "" ) continue;
sscanf(rivi.c_str(),"%s |%lf |%d",nimike,&hinta,& kpl);
...
}
...
Tässäkin
vaihtoehdossa on vielä muutamia huonoja puolia:
- *
- virheellinen
rivi hyväksytään ja lopuille arvoille jää edellisen
kerran arvot
- *
- sscanf
käytetyllä formaatilla on vaarallinen, mikäli
nimikekenttään sattuisi tulemaan nimike, jossa on yli 20 merkkiä
- *
- mikäli
nimikekentässä tarvittaisiin nimi, jossa on
välilyöntejä, menisi syöttö jälleen sekaisin
- *
- mikäli
rivillä olisi ennalta tuntematon määrä kenttiä, ei
tämä formaatti toimisi