Ennen kutsua: +---rivi v +-------------------------------------------------+ | |V|o|l|v|o| ||| | |1|2|3|0|0| ||| |1| | | | | | | +--------------------------------------0----------+
1. Kutsu: p = strtok(rivi,"|");
+---rivi v +-------------------------------------------------+ | |V|o|l|v|o| | | | |1|2|3|0|0| ||| |1| | | | | | | +--------------0-----------------------0----------+ ^ +--- p
2. Kutsu: p = strtok(NULL,"|");
+---rivi v +-------------------------------------------------+ | |V|o|l|v|o| | | | |1|2|3|0|0| | | |1| | | | | | | +--------------0-----------------0-----0----------+ ^ p ---------+
3. Kutsu: p = strtok(NULL,"|");
+---rivi v +-------------------------------------------------+ | |V|o|l|v|o| | | | |1|2|3|0|0| | | |1| | | | | | | +--------------0-----------------0-----0----------+ ^ p ---------------------------+
4. Kutsu: p = strtok(NULL,"|");
+---rivi v +-------------------------------------------------+ | |V|o|l|v|o| | | | |1|2|3|0|0| | | |1| | | | | | | +--------------0-----------------0-----0----------+ p ----> NULLNäyttäisi siis siltä, että strtok sopii hyvin tarkoituksiimme:
int rivi_tuotteeksi(char *rivi, Tuote_tyyppi *tuote) { char *p; p = strtok(rivi,"|"); if (!p) return 1; poista_tyhjat(p); kopioi_jono(N_S(tuote- >nimike),p); p = strtok(NULL,"|"); if (!p) return 1; if ( sscanf(p,"%lf",&tuote- >hinta) != 1 ) return 1; p = strtok(NULL,"|"); if (!p) return 1; if ( sscanf(p,"%d",&tuote- >kpl) != 1 ) return 1; return 0; } int tulosta_tuotteet(void) { ... while ( !feof(f) ) { if ( f_lue_jono(f,N_S(rivi)) <= OLETUS ) continue; if ( rivi_tuotteeksi(rivi,&tuote) ) continue; printf("%- 20s %7.0lf %4d\n",tuote.nimike,tuote.hinta,tuote.kpl); } ... }