codice:
#include <stdio.h>
#include <string.h>
#define MAX_UTENTI 2
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
utente vett[MAX_UTENTI]; // Dichiara un vettore di MAX_UTENTI strutture di tipo utente
int main(){
int i = 0;
int a = 0;
set_zero(vett); // Setta a 0 la lista di utenti
printf("\n1 per inserire un nuovo utente\n2 per visuallizzare la lista utenti\n3 per terminare\n\n");
fflush(stdin);
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
printf ("Leggo la lista\n\n");
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: ");
}
fflush(stdin);
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<MAX_UTENTI; i++){
// Inserisci 0 nel campo age della locazione array + elemento corrente dell'array di strutture
array[i].age = 0;
strcpy(array[i].cognome,"");
strcpy(array[i].nome,"");
printf ("Azzero la posizione %d",i);
}
return;
}
/* 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<MAX_UTENTI; i++){
if(array[i].age == 0){ // Se la locazione corrente è libera
printf ("La posizione libera è %d\n\n",i);
return i; // Setta val alla locazione corrente libera
}
}
printf ("NON LIBERE\n\n");
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: ");
fflush(stdin);
scanf("%s", array[locazione].nome);
printf("Inserire il cognome: ");
fflush(stdin);
scanf("%s", array[locazione].cognome);
printf("Inserire l'età: ");
fflush(stdin);
scanf("%d", &array[locazione].age);
}
printf ("La locazione è %d\n\n",locazione);
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<MAX_UTENTI && array[i].age != 0; i++){
printf("Nome utente %d: %s\n",i, array[i].nome);
printf("Cognome utente %d: %s\n",i, array[i].cognome);
printf("Età utente %d: %d\n\n", i, array[i].age);
}
return;
}
se ti può essere utile ho fatto qualche correzione...ora dovrebbe andare.
ora gira con una lista di max 2 utenti...basta che cambi la define in cima però per modificarlo