17.5.2 Rivi kerrallaan lukeminen
Ongelmaa voidaan osittain ratkaista lukemalla tiedostoa merkkijonoon aina rivi
kerrallaan:
FILE *f; Tuote_tyyppi tuote; char rivi[80];
...
while ( !feof(f) ) {
if ( f_lue_jono(f,N_S(rivi)) <= OLETUS ) continue;
sscanf(rivi,"%s |%lf |%d",&tuote.nimike,&tuote.hinta,&tuote.kpl);
printf("%- 20s %7.0lf %4d\n",tuote.nimike,tuote.hinta,tuote.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