Passaggio di un vettore di struttura allocato dinamicamente

di il
6 risposte

Passaggio di un vettore di struttura allocato dinamicamente

Buongiorno,
ho problema con il passaggio di un vettore di una struttura formata da un intero e da un puntore a char. L'esercizio prevede di non definire
la variabile book come una variabile globale ma di provare a definirla nel main e a passarla come argomento alle varie funzioni.
i primi due punti dell'esercizio sono:
1)funzione newBook(n) =>Crea un nuovo registro che permetta la prenotazione di n posti, da 0 a n-1. Se esiste già un registro di
prenotazione, quest’ultimo deve essere cancellato.
2)funzione book(k;name)=> Se il posto k è libero, prenota il posto k per il cliente identificato da name. Altrimenti, stampa un messaggio di errore
alle funzioni si possono aggiungere se necessario altri parametri.. poi ci sono altre tre punti ma io mi sono fermata al punto due
/*Esercizio fine L05*/

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>


typedef struct
    {
      int occupato;
      char *nome;
    } _book;

//prototipi di funzione
_book *new_book(int n);
void book(int n, char *nme, _book **b);


int main(void)
{
  _book *b=NULL;
  char c, nome[35];
  int n=0;
	
	while	((c = getchar())!= 'f' )
	{
		switch (c)
			{
				case 'b':	//  b n  -->  newBook(n)		
				  while ((c=getchar())!='\n')
            {
            	if (isdigit(c))
            	  {
            		  n=c-'0';
            		  b=new_book(n);
            		}
            }
					break;
				case '+': //  + k name  --> book(k, name) 
            	scanf("%d %s", &n, nome);
							book(n,nome, &b);
							printf("prova stampa dal main occupato %d e nome %s\n", b[n].occupato,b[n].nome);
					break;
				case '-': // - k --> cancel(k)
					break;
				case 'm': // m from to ---> move from to
					break;
				case 'p': //p ---> printBook()
					break; 
			}
		}	
	free (b);			 
	return 0;
}
//funzioni
_book *new_book(int n)
{	
  _book *libri;
  //alloca un blocco di memoria in grado di contenere n elementi consecutivi
	libri=(_book *)malloc(n*sizeof(_book)); 
	if (libri==NULL)
			printf("Mermoria non suff. n=%d\n", n);
	else
 		printf("Mermoria suff.\n");
 	return libri;
}
//funzione che assegna una prenotazione
void book(int n, char *nme, _book **b)
{
   int size=35;//assumo che il nome sia grande 35 al massimo
   b[n]->occupato=1; //1=prenotato
   b[n]->nome=malloc(size*sizeof(char));
   strcpy(b[n]->nome,nme);
   //controllo se prende i dati 
   printf("prova stampa occupato %d e nome %s\n", b[n]->occupato,b[n]->nome);
}


6 Risposte

Devi accedere o registrarti per scrivere nel forum
6 risposte