Ciao,
vi chiedo ancora un aiutone...Lunedi ho l'esame di laboratorio di programmazione e sono un po' nel panico...vi prego di aiutarmi se potete....
L'esercizio è questo:
scrivere un programma che faccia uso di un array di strutture, ogi struttura rappresenta un utente e contiene i campi: nome, cognome, età.
Il programma deve poter inserire un utente se c'è ancora spazio libero nell'array e visualizzare la lista degli utenti....dà qualche errore in fase di compilazione. La prima parte dell'esame è su carta....mi potete dare anche un giudizio su com'è scritto il codice secondo voi?se l'organizzazioni in funzioni che ho fatto va bene o se fà pietà?insomma secondo voi con un esercizio del genere che voto mi avreste dato? hehe
Gl errori sono:
[root@dhcppc0 ripasso]# cc struct2.c -o struct2
struct2.c: In function ‘set_zero’:
struct2.c:64: error: syntax error before ‘;’ token
struct2.c:96: error: ‘name’ undeclared (first use in this function)
struct2.c:96: error: (Each undeclared identifier is reported only once
struct2.c:96: error: for each function it appears in.)
struct2.c:109: warning: ‘return’ with a value, in function returning void
struct2.c: In function ‘read_list’:
struct2.c:123: error: syntax error before ‘;’ token
[root@dhcppc0 ripasso]#
Alcuni proprio non me li spiego...perchè le variabili le HO DICHIARATE..disperazione :-/
Il codice è:
Mille graziecodice:#include <stdio.h> #include <string.h> struct utente{ char nome[15]; char cognome[15]; int age; }; typedef struct utente utente; // Crea l'alias utente del tipo di dato struct utente void set_zero(utente *); // Riceve il puntatore ad un'array di strutture, non ritorna alcun valore int is_empty(utente *); // Riceve il puntatore ad un'array di strutture e ritorna un valore intero int insert_user(utente *); // Riceve il puntatore ad un'array di strutture e ritorna un valore intero void read_list(utente *); // Riceve il puntatore ad un'array di strutture, non ritorna alcun valore int main(){ int i = 0; int a = 0; utente vett[100]; // Dichiara un vettore di 100 strutture di tipo utente set_zero(vett); // Setta a 0 la lista di utenti printf("\n1 per inserire un nuovo utente\n2 per visuallizzare la lista utenti\3 per terminare\n\n"); scanf("%d", &i); while(i != 3){ if(i = 1){ // Se i uguale ad 1 prova ad inserire un utente nell'array di strutture a = insert_user(vett); // Passa il vettore alla funzione if(a = -1) printf("Utente non inserito, lista piena, non c'è più spazio disponibile\n\n"); else printf("Utente inserito nella lista\n\n"); printf("Inserire un nuovo valore: "); } else if(i = 2){ // Leggi la lista read_list(vett); // Passa il vettore alla funzione printf("Inserire un nuovo valore: "); } else{ printf("Scelta errata, inserire un valore corretto: "); printf("Inserire un nuovo valore: "); } scanf("%d", &i); } return 0; } /* La funzione set_zero setta a 0 l'età degli utenti, quando un utente ha età settata a 0 significa che la locazione è libera, riceve il puntatore al primo elemento della lista */ void set_zero(utente *array){ int i; for(i=0; i<100; i++) // Inserisci 0 nel campo age della locazione array + elemento corrente dell'array di strutture (array+i)->age = 0; return (void); } /* La funzione is_empty riceve il puntatore al primo elemento dell'array di strutture, ritorna -1 se l'array di strutture è pieno o l'indice della prima locazione libera se non è ancora pieno *( int is_empty(utente *array){ int val = -1; // Inizialmente setta a -1 il valore di val int i = 0; // Finchè non ha scorso tutta la lista o finchè il valore di val corrisponde a -1 scorri l'array for(i=0; i<100 || val==-1; i++){ if((array+i).age == 0) // Se la locazione corrente è libera val = i; // Setta val alla locazione corrente libera return(val); // Ritorna val: -1 se la lista è piena o prima locazione libera } /* La funzione insert_user inserisce se possibile un nuovo utente nel vettore di strutture e ritorna il valore -1 se l'array di strutture è pieno e non è riuscita ad inserire l'utente */ int insert_user(utente *array){ char name[15]; char surname[15]; int age; int locazione = is_empty(array); // Metti in locazione il valore della prima locazione libera if(locazione != -1){ // Se può inserire un valore nell'array di strutture (la lista non è piena) printf("Inserire il nome: "); scanf("%c", name); // Copia il nome inserito nel campo nome della struttura alla corretta locazione nell'array strcpy((array+locazione)->nome, name); printf("Inserisci il cognome: "); scanf("%c", surname); // Copia il cognome inserito nel campo cognome della struttura alla corretta locazione nell'array strcpy((array+locazione)->cognome, surname); printf("Inserire l'età: "); scanf("%d", &age); // Copia l'età inserita nel campo age della struttura alla corretta locazione nell'array) (array+locazione)->age = age; } return(locazione); // Ritorna -1 se la lista è piena, altro se ha effettuato l'inserimento } void read_list(utente *array){ int i; // Leggi dall'array finchè ci sono ancora locazioni o finchè la locazione trovata non è vuota (age == 0) for(i=0; i<100 || (array+i)->age != 0; i++){ printf("Nome utente %d: %c\n",i, (array+i)->nome); printf("Cognome utente %d: %c\n",i, (array+i)->cognome); printf("Età utente %d: %c\n", i, (array+i)->age); } return (void); }
Andrea

Rispondi quotando