Ho modificato cosi', mi da lo stesso problema di prima: non mi fa leggere il nome, ma solo cognome e matricola (tra l'altro è una lettura fittizia perchè nelle stampe mi da caratteri a casaccio).
Codice:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_SIZE 10
struct pila
{
char nome[30];
char cognome[30];
int matricola;
};
void InserisceTesta(struct pila elenco[], short *n);
void Elimina_pila(struct pila elenco[],short *n);
void CancellaTesta(struct pila elenco[],short *n);
void StampaTesta(struct pila elenco[], short *n);
void StampaPila(struct pila elenco[], short *n);
main()
{
struct pila elenco[MAX_SIZE];
short what,n_persone=0;
while (1)
{
puts("\nScegli l'operazione:");
puts("[1] Inserisci un elemento in testa");
puts("[2] Cancella Pila");
puts("[3] Stampa numero elementi nella pila");
puts("[4] Elimina elemento in testa");
puts("[5] Stampa testa");
puts("[6] Stampa pila");
puts("[7] Esci");
printf("Inserisci Scelta: ");
scanf("%hd", &what);
switch(what)
{
case 1:
InserisceTesta(elenco,&n_persone);
break;
case 2:
Elimina_pila(elenco,&n_persone);
break;
case 3:
if (n_persone!=1)
printf("\nCi sono %d elementi nella pila\n",n_persone);
else
puts("\nC'è 1 elemento nella pila");
break;
case 4:
CancellaTesta(elenco,&n_persone);
break;
case 5: StampaTesta(elenco,&n_persone);
break;
case 6: StampaPila(elenco,&n_persone);
break;
case 7:
exit(0);
break;
default:
puts("\nScelta sbagliata! Ripeti!\n\n");
}
}
}
void InserisceTesta(struct pila elenco[], short *n)
{
short i=(*n)-1;
if (*n==MAX_SIZE)
puts("Spazio finito");
else
{
puts("Scrivi 1 nome");
gets(elenco[i].nome);
puts("Scrivi 1 cognome");
gets(elenco[i].cognome);
puts("Digita la matricola");
scanf("%d", elenco[i].matricola);
*n+=1;
}
}
void Elimina_pila(struct pila elenco[],short *n)
{
short i;
if (n==NULL)
puts("La pila non contiene nodi");
else
{
for (i=0;i<(*n);i++)
{
elenco[i].nome==NULL;
elenco[i].cognome==NULL;
elenco[i].matricola=0;
}
}
*n=0;
}
void CancellaTesta(struct pila elenco[],short *n)
{
short i=(*n)-1;
if (n==NULL)
puts("La pila non contiene nodi");
else
{
elenco[i].nome==NULL;
elenco[i].cognome==NULL;
elenco[i].matricola=0;
}
*n=i;
}
void StampaTesta(struct pila elenco[], short *n)
{
short i=(*n)-1;
if (i>=0)
printf("\nStudente %s %s, matr. %d",elenco[i].nome, elenco[i].cognome, elenco[i].matricola);
else
puts("\nNon ci sono persone nella pila");
}
void StampaPila(struct pila elenco[], short *n)
{
short i;
if (n=NULL)
puts("La pila non conviene nodi");
else
{
for (i=0;i<(*n);i++)
printf("Studente %s %s, matr. %d",elenco[i].nome, elenco[i].cognome, elenco[i].matricola);
}
}
C'è qualcosa che non va nella function della lettura credo, ma cosa?