Discussione: Array di struct
View Single Post
Old 07-06-2007, 15:00   #5
k_mishima
Member
 
Iscritto dal: Jan 2007
Messaggi: 173
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?
k_mishima è offline   Rispondi citando il messaggio o parte di esso