|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Dec 2005
Città: Lingua di terra che taglia il Tirreno
Messaggi: 795
|
[C] Un'occhiata al main
Il testo dice:
Scrivere una funzione che presa in input una stringa nomefile, apre il file di nome nomefile. Tale file contiene un elenco di record (sono dati di studenti)così composto: typedef struct Record { long matricola; char nome[20]; char cognome[40]; }; Record; Si scriva un programma che: crei una lista L1 con i dati degli studenti, ordinata in base alla matricola; stampi a video il contenuto di L1 prelevi in input un numero di matricola e stampi a video i dati relativi allo studente corrispondente. Tralascio per brevità alcune cosette; struct record { long matricola; char nome[20]; char cognome[40]; struct record *next; }; PROTOTIPI DI FUNZIONE FILE * aprifile(char *); void in_lista_ordinata(struct record **, struct record **); void stampa_lista(struct record *); void stampa_elemento_lista(struct record *, long); La prima funzione ritorna un puntatore al file. E' ok? void main (void) { long mat; char stringa[]; FILE *fp; printf("Inserire il nome del file\n"); gets(stringa); fp=aprifile(stringa); struct record *head =NULL; /* testa della lista */ struct record *punt=NULL: punt=(struct record *)malloc(sizeof(struct record)); while(!feof(stdin)) fscanf(fp, "%ld%s%s", punt->matricola, punt->nome, punt->cognome); fclose(fp); if(punt !=NULL) in_lista_ordinata(&head, &punt); stampa_lista(head); while(1) { printf("Inserire il numero di matricola\n"); scanf("%ld", & mat); stampa_elemento_lista(head, mat); } } Le funzioni non le scrivo e cmq non rappresentano un problema. Dite che può andare? In particolare vorrei sapere una cosa: una volta creato il puntatore punt alloco con la malloc lo spazio, per fargli caricare i dati da fscanf; ma se io non usassi la malloc, con la sola definizione del puntatore che accadrebbe? |
![]() |
![]() |
![]() |
#2 | ||||||||
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16211
|
Quote:
Quote:
Quote:
![]() Quote:
Inserisci una lunghezza massima: 256 dovrebbe bastare. Quote:
Quote:
Quote:
Inoltre, così riscrivi sempre la stessa zona di memoria, senza aggiungere via via i nuovi elementi. Quote:
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" ![]() Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu |
||||||||
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Dec 2005
Città: Lingua di terra che taglia il Tirreno
Messaggi: 795
|
Scusa se le dichiarazioni non erano tutte all'inizio; è che copiandolo dalla brutta e in fretta non ci ho badato;
Per la feof lo stdin vale se scrivo sul file e allora mi interessa appunto lo stdin; Quindi l'istruzione corretta è, nel mio caso, visto che devo leggere il file: while(!feof(fp)) con feof che si riferisce al puntatore al file. Grazie delle osservazioni preziose cmq! |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 00:52.