PDA

View Full Version : [C] Problema con fscanf e lettura da file


Dani88
28-01-2008, 10:12
Raga ho un probl con la funzione fscanf: in pratica io ho un file txt fatto così
BD675ZK 415 13:23:40 347 15:10:30 14.50
AD654MJ 267 17:25:15 876 18:30:37 4.80


ora se faccio
fscanf(f,"%s",targa,);
cout<<targa<<endl;
tutto ok, mi stampa la targa della prima riga, cioè BD675ZK, ma se invece vado avanti con la lettura, per prendere il secondo dato, che sarebbe 415, mettendo
fscanf(f,"%s %d",targa,casIN);
cout<<targa<<endl<<casIN<<endl;
mi da errore di esecuzione

non capisco xkè però :( :help: :help:

RaouL_BennetH
28-01-2008, 10:18
Ma visto che stai usando C++, non sarebbe più semplice per te usare ifstream?

Dani88
28-01-2008, 10:28
bisogna che mi dici com'è la sintassi :D xkè nn l'abbiamo ancora fatta... :( xrò se è più semplice ben volentieri :D

edit:
lo metto xkè magari non si è capito :) mi serve che ciascuna parola o cifra venga memorizz in una variab diversa, la prima in targa, la seconda in casIN, la terza in oraIN, ecc...

Ziosilvio
28-01-2008, 11:46
Ho paura che c'entri il modo in cui le funzioni della famiglia scanf interpretano gli spazi nelle stringhe di formato.
È spiegato sul Kernighan&Ritchie molto meglio di quanto potrei fare io.
Curiosità: la chiamata del secondo tipo, se ha successo, dovrebbe restituire un valore intero 2. Prova a fare:
int x;
x = fscanf(f,"%s %d",targa,casIN);
printf("%d\n",x);
e dicci cosa esce fuori.

Dani88
28-01-2008, 12:00
ho risolto usando
fstream pippo("H:\\Università\\Fondamenti Informatica\\Programmi Miei\\prove varie\\Prova.txt", ios::in);

così è perfetto :D mi legge parola per parola e sono pure riuscito a rifare a casa un esame che aveva dato il prof la volta scorsa :D

Mirkolo
28-01-2008, 13:36
Raga ho un probl con la funzione fscanf: in pratica io ho un file txt fatto così
BD675ZK 415 13:23:40 347 15:10:30 14.50
AD654MJ 267 17:25:15 876 18:30:37 4.80


ora se faccio
fscanf(f,"%s",targa,);
cout<<targa<<endl;
tutto ok, mi stampa la targa della prima riga, cioè BD675ZK, ma se invece vado avanti con la lettura, per prendere il secondo dato, che sarebbe 415, mettendo
fscanf(f,"%s %d",targa,casIN);
cout<<targa<<endl<<casIN<<endl;
mi da errore di esecuzione

non capisco xkè però :( :help: :help:

fscanf(f,"%s %d",targa,&casIN);

Non hai riportato il resto del codice, ma penso che le dichiarazioni siano circa così:

char targa[32];
int casIN;

quindi passando targa passi il puntatore al primo carattere, mentre con casIN passi il valore quando invece devi dargli l'indirizzo dove andarlo a scrivere, per questo ti crasha... fscanf tenta di scrivere all'indirizzo dato dal valore contenuto da casIN. Spero d'essere stato chiaro, ciao.

Dani88
28-01-2008, 14:00
è vero...c'hai ragione :muro: :muro: che pirla :D vabbè ora lo terrò presente