|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Apr 2006
Messaggi: 15
|
[C] caricamento elenco da file
salve ragazzi,
avrei una cosa da chiedervi: devo fare un programma che mi carichi un elenco di auto da file con la seguente sintassi: !marca!modello!prezzo! ho creato la seguente funzione: int carica(FILE *f,automobile el[]) { int i,k; for(i=0;!feof(f);i++){ for(k=0;(el[i].marca[k]=fgetc(f))!='!';k++); el[i].marca[k]='\0'; for(k=0;((el[i].modello[k]=fgetc(f))!='!')&&!feof(f);k++); el[i].modello[k]='\0'; fscanf(f,"%f \n ",&(el[i].prezzo)); } return i; } vorrei chiedervi come devo fare per far caricare anche il primo punto esclamativo !...? riesco solo a caricare marca,modello e prezzo,ma a causa del mancato caricamento del primo punto esclamativo a video l'elenco mi compare molto male.. ringrazio anticipatamente per le vostre risposte... |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2004
Messaggi: 357
|
non fai prima con
Codice:
fscanf("!%s!%s!%f!", el[i].marca, el[i].modello, &el[i].prezzo);
|
|
|
|
|
|
#3 |
|
Junior Member
Iscritto dal: Apr 2006
Messaggi: 15
|
no non mi carica nulla se faccio come dici tu...
chi altro saprebbe darmi un aiuto..per piacere |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
prova cosi': Codice:
int carica(FILE *f,automobile el[])
{
int i,k;
for(i = 0; !feof(f); i++ )
{
el[i].marca[0] = fgetc(f);
for( k = 1; (el[i].marca[k] = fgetc(f)) != '!'; k++ )
;
el[i].marca[k] = '\0';
el[i].modello[0] = fgetc(f);
for( k = 1; ((el[i].modello[k] = fgetc(f)) != '!' ) && !feof(f); k++ )
;
el[i].modello[k]='\0';
el[i].prezzo = '!';
fscanf( f, "%f \n ",&(el[i].prezzo+1));
}
return i;
}
in pratica leggi il primo carattere (!) e il ciclo parte da 1 anziche da 0 non so se ci sono errori non ho compilato e controllato bene. Comunque non e' un bel sistema, per me, per gestire records su file
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Mi sa che:
Codice:
el[i].modello[0] = fgetc(f); Codice:
el[i].modello[0] = '!'; Comunque ti consiglio records a lunghezza fissa. In C gia' e' dura stare attenti a tutto, se ti complichi la vita non ti passa piu' poi leggi/scrivi interi blocchi con fread(..) e fwrite(...)
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
|
|
|
|
#7 |
|
Junior Member
Iscritto dal: Apr 2006
Messaggi: 15
|
grazie..comunque non uso fread e fwrite perchè non rientrano nel programma.ora provo un pò e ti faccio sapere..
|
|
|
|
|
|
#8 |
|
Junior Member
Iscritto dal: Apr 2006
Messaggi: 15
|
niente ancora..neanche il tuo codice funziona..
vi copio il file txt da leggere: 8 !Opel!Astra!18000.00! !Fiat!Punto!13500.00! !Audi!A4!32000.00! !Renault!Megane!22999.99! !Fiat!Punto!13500.00! !Opel!Corsa!12300.00! !Alfa Romeo!147!29999.99! !Citroen!C3!14850.00! !Fiat!Multipla!15550.00! |
|
|
|
|
|
#9 |
|
Junior Member
Iscritto dal: Apr 2006
Messaggi: 15
|
codice e schermata a video
allora vi posto prima il codice della mia funzione e poi cosa mi compare a video:
CODICE: int carica(FILE *f,automobile el[]) { int i,k,n; fscanf(f,"%d",&n); for(i=0;!feof(f);i++){ fscanf(f,"!"); for(k=0;(el[i].marca[k]=fgetc(f))!='!';k++); el[i].marca[k]='\0'; for(k=0;((el[i].modello[k]=fgetc(f))!='!')&&!feof(f);k++); el[i].modello[k]='\0'; fscanf(f,"%f!\n",&(el[i].prezzo)); } return i; } SCHERMATA A VIDEO: digitare il nome del file da caricare: auto.txt sono stati caricati 10 record dal file auto.txt Premere un tasto per continuare . . . visualizzazione dell'elenco a video: !Opel!0.00 Astra!18000.00!0.00 Fiat!Punto!13500.00 Audi!A4!32000.00 Renault!Megane!22999.99 Fiat!Punto!13500.00 Opel!Corsa!12300.00 Alfa Romeo!147!29999.99 Citroen!C3!14850.00 Fiat!Multipla!15550.00 Premere un tasto per continuare . . . potreste gentilmente correggere il mio errore..grazie |
|
|
|
|
|
#10 |
|
Member
Iscritto dal: Apr 2004
Messaggi: 130
|
Giusto per darti un suggerimento:
Codice:
#include <stdio.h>
typedef struct _elem {
char marca[16];
char modello[16];
float prezzo;
} elem;
int main()
{
elem el[10];
int i, j, dummy;
FILE *in = fopen("auto.txt", "r");
fscanf(in, "%d", &dummy);
printf("Letto: %d\n", dummy);
i = 0;
while (fscanf(in, " !%[^!]!%[^!]!%f!",
el[i].marca, el[i].modello,
&el[i].prezzo) == 3)
++i;
fclose(in);
printf("Caricati %d record\n\n", i);
puts(" marca | modello | prezzo |");
puts("---------------------------------");
for (j = 0; j < i; ++j) {
printf("%10s %10s\t%.2f\n",
el[j].marca, el[j].modello,
el[j].prezzo);
}
return 0;
}
Codice:
goku@big:/tmp$ ./leggifile
Letto: 8
Caricati 9 record
marca | modello | prezzo |
---------------------------------
Opel Astra 18000.00
Fiat Punto 13500.00
Audi A4 32000.00
Renault Megane 22999.99
Fiat Punto 13500.00
Opel Corsa 12300.00
Alfa Romeo 147 29999.99
Citroen C3 14850.00
Fiat Multipla 15550.00
goku@big:/tmp$
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 10:41.



















