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..