|
|
|
![]() |
|
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: 19:13.