|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jun 2003
Città: Ferrara
Messaggi: 5947
|
Aiuto per esame
Ciao a tutti
Ho fatto un programmino per l' esame di informatica in c. E' una rubrica, ma quando vado a compilare ed eseguire il programma tutto ok. Il problema è che ad esempio se inserisco la persona mario rossi viene inserita come marioààààààà rosssiàààààààà Perchè? Aiuto vi prego tra poco ho l' esame. Ecco la funzione per inserire il nome typedef struct {char nome[32]; char cognome[32];char telefono[32];} contatto; void ins_contatto() { contatto v[1]; FILE *fp; fp=fopen("rubrica.bin", "a+"); memset(v,0,sizeof(v)); system("cls"); printf("************************************************************\n"); printf("\nHai scelto di inserire un contatto in rubrica"); fseek(fp,0,SEEK_END); printf("\n\nOra inserici il nome della persona da inserire nella rubrica\n"); printf("\n Nome ----> "); scanf("%s", v[0].nome); printf("\n\nbene, ora inserisci il cognome e premi invio\n"); printf("\n cognome ---> "); scanf("%s", v[0].cognome); printf("\n\ndigita ora il numero di telefono\n"); printf("\n telefono ---> "); scanf("%s", v[0].telefono); fwrite(v, sizeof(contatto), 1, fp); system("cls"); printf("\ncontatto inserito correttemente\n\n\n"); fclose(fp); //return; } e quella per leggere void leggi_tutti() { contatto v[1]; FILE *fp; fp=fopen("rubrica.bin", "r"); system("cls"); while((fread(v, sizeof(contatto), 1, fp)!= 0)) { printf("\n%s ", v[0].nome); printf("%s ", v[0].cognome); printf("%s \n", v[0].telefono); } //return; }
__________________
Ho fatto affati con.... troppi ![]() |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: May 2003
Città: Rimini
Messaggi: 2279
|
Non ho capito perché contatto lo hai dichiarato come vettore di un solo elemento. Se hai un solo elemento, basta una variabile...
Inoltre io non inserirei i campi uno alla volta nel file, ma come struttura; se no la struttura a che ti serve? Basterebbe leggere 3 stringhe alla volta... E poi chiudi il file nella funzione di stampa...
__________________
Gigabyte 965P-DS3 ¤ E6600@400*8 ¤ Scythe Ninja Plus Rev.B ¤ Ram 4GB ¤ HD SSD Crucial M4 128GB
Gainward 4850 Golden Sample ¤ Antec NEO 550HE ¤ CM Centurion 534 ¤ Dell Ultrasharp U2312HM Notebook Asus N551JW ¤ i7-4750HQ ¤ nVidia 960M 4GB ¤ 16GB DDR3 ¤ SSD Intel 850EVO 500GB |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Jan 2004
Città: Montignoso(MS)
Messaggi: 9448
|
I buffer per memorizzare i campi della struct sono di 32 byte pertanto, a meno che tu non aggiunga esplicitamente un carattere di terminazione ('\0') la printf ti stampa tutti i 32 byte dei quali soltanto una parte sara' significativa. O opti per l'allocazione dinamica dei campi in modo da poter ottimizzare l'utilizzo della memoria e per poter usare nomi e cognomi lunghi a piacere oppure inserisci tu il carattere di terminazione quando fai le scanf.
P.S.: penso che sia questo il problema.
__________________
"Il Meglio che si possa ottenere è evitare il peggio." I.C. |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Jun 2003
Città: Ferrara
Messaggi: 5947
|
Mi dici come fare con il carattere di terminazione che non ricordo + ?
__________________
Ho fatto affati con.... troppi ![]() |
![]() |
![]() |
![]() |
#5 | |
Senior Member
Iscritto dal: Nov 2003
Messaggi: 980
|
Quote:
![]() |
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Jun 2003
Città: Ferrara
Messaggi: 5947
|
up. Allora mi dite come mettere il carattere di terminazione /o?
__________________
Ho fatto affati con.... troppi ![]() |
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Jul 2000
Città: Amsterdam
Messaggi: 217
|
Da man scanf -> sezione %s.
Quote:
![]() Io intanto correggerei la dichiarazione di contatto. Prova ad evitare di creare un array di grandezza 1; dichiaralo invece come contatto variabile; Un'altra cosa non mi e' chiara.... memset(v,0,sizeof(v));. Inutile mi sembra, non capisco veramente la sua funzione in questo contesto.... |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 10:36.