Problema lettura del codice

di il
1 risposte

Problema lettura del codice

Ciao ragazzi,

devo scrivere un programma per la gestione di un albergo simulando le liste.. In pratica devo creare una struct con due campi (info e next) dove next corrisponde al puntatore per l'accesso al nodo successivo della lista..

Devo lavorare con due puntatori (puntatori sempre per modo di dire perchè in realtà sono 2 variabili short) che mi segnano uno la posizione libera dove andare a scrivere e l'altro la posizione dell'ultimo elemento inserito della lista..

Solo per capire l'esercizio sono stato 2 giorni

Comunque.. Erano due giorni che sbattevo la testa e finalmente 2 ore fa mi è venuta l'illuminazione ed ho buttato giù sto codice:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LEN 9

struct albergo{
       char info[15];
       short next;
       };
typedef struct albergo ALBERGO;

void inserimento (ALBERGO a[], short *p_dati, short *p_libera);
void eliminazione (ALBERGO a[], short *p_dati, short *p_libera);

void main ()
{
     ALBERGO a[9]={{"", 1},
                   {"", 2},
                   {"", 3},
                   {"", 4},
                   {"", 5},
                   {"", 6},
                   {"", 7},
                   {"", 8},
                   {"", -1}};

     short p_libera=0;
     short p_dati=-1;
     short punt;
     short i,scelta=-1;
     
     printf("\tBenvenuto nell'albergo. Non ci sono camere prenotate. Premi INVIO per continuare\n\n"); 
     getchar();
     system("cls");
          
     while (scelta!=0)
     {
         system("cls");
         punt=p_dati; //visualizzo la lista
         i=p_dati;
         while (punt!=-1)
         {
             printf("%d) %s | %d\n",punt,a[punt].info,a[punt].next);
             punt=a[punt].next;
             i--;
         }
     
         printf("\np_dati: %d \t p_libera: %d\n",p_dati,p_libera);
		 printf("\n\n1-->INSERISCI ELEMENTO NELL'ALBERGO\n2-->ELIMINA ELEMENTO DALL'ALBERGO\n0-->ESCI DAL PROGRAMMA\n\n");
         printf("Scelta: "); fflush(stdin); scanf("%d",&scelta);
         
         if(scelta==1)
         {
             if(p_libera==MAX_LEN-1)
             {
                printf("Albergo pieno!!\n\n");
                system("pause");
             }
             else
             {
                system("cls");
                inserimento (a,&p_dati,&p_libera);
             }
         } 
         if(scelta==2)
         {
             if(p_dati==-1)
             {
                printf("Albergo vuoto!!\n\n");
                system("pause");
             }
             else
                eliminazione (a,&p_dati,&p_libera);
         } 
     }    
     
     printf("\n\n"); system("pause");
}
     
     
void inserimento (ALBERGO a[], short *p_dati, short *p_libera)
{
     char nome[15];
     short temp;
     
     printf("Inserisci il nome del nuovo elemento: "); fflush(stdin); scanf("%s",&nome);
     
     strcpy(a[*p_libera].info,nome);
     temp=*p_libera;
     *p_libera=a[*p_libera].next;
     a[temp].next=*p_dati;
     if (temp>*p_dati)
         *p_dati=temp;
     else
     {
         a[temp].next=a[temp+1].next;
         a[temp+1].next=temp;
     }
}

void eliminazione (ALBERGO a[], short *p_dati, short *p_libera)
{
     short eliminato;
     
     printf("Inserisci il numero dell'elemento eliminato: "); fflush(stdin); scanf("%d",&eliminato);

	 if(eliminato==*p_dati)
	 {
		 *p_dati=eliminato-1;
		 a[eliminato].next=eliminato+1;
		 *p_libera=eliminato;
	 }
     else
	 {
         a[eliminato+1].next=a[eliminato].next;
         a[eliminato].next=*p_libera;
         *p_libera=eliminato;
	 }
}

Il problema è molto strano..

In pratica eseguendolo con DEV mi da errore di Segmentazione mentre eseguendolo con Visual C++ della Microsoft il programma gira, ci sono ancora delle cose da sistemare, ma almeno gira ..

Non riesco a capire il perchè.. Qualcuno può spiegarmi l'eventuale errore?

Come sempre, grazie per eventuali risposte..

1 Risposte

  • Re: Problema lettura del codice

    C'è una & in più
    
    scanf("%s",&nome);
    
    fflush(stdin) è un estensione Microsoft non nello standard quindi devi trovare altri modi per pulire il stdin. Inoltre noto una tua inclinazione per rendere dificile l'implementazione di qualsiasi codice. Avete un prof che vi vuole tanto bene?
Devi accedere o registrarti per scrivere nel forum
1 risposte