Questo programma simula un servizio di prenotazione posti cinema (dalla stessa macchina x ora).
Purtroppo presenta una serie di problemi che nn riesco ancora a risolvere.LA compilazione perlomeno è ok.

Da i seguenti problemi:
1) Usando la prima volta l'opzione a)visualizza posti liberi
nonostante siano tutti posti non prenotati la matrice appare cosi

A2 A3
B1 B2 B3
C1 C2 C3

nel main ho aggiunto la chiamata alla funzione che visualizza i posti x vedere se combinava la stessa cosa invece visualizza anche il posto A1.
Ma se poi uso la chiamata se lo mangia anche se è presente(infatti è possibile prenotarlo).

2)altro bug:
Se ad esempio il posto B2 è libero e lo prenoto
su schermo stampa:
- posto non disponibile
-Inserisci il posto
-Il posto è vuoto lo riserviamo a voi

IN effetti il posto viene cmq prenotato anche se nn ci dovrebbero essere le prime 2 stampate

3) questo piu' che altro è un problema estetico
Se prenoto un posto ad esempio A1 poi visualizza la
matrice cosi

A2 A3
B1 B2 B3
C1 C2 C3

Ora ecco il codice del file .h:

struct posto
{
unsigned char idPosto[3];
int flag;
};

//typedef struct posto cine[3][3];
// funzioni

void inizializza_cinema(struct posto cine[3][3]);
int cinema_pieno(struct posto cine[3][3]);
void posti_vuoti(struct posto cine[3][3]);
//int cinema_pieno(struct posto cine[3][3]);
void assegna_posto(struct posto cine[3][3],unsigned char x, unsigned char y);
void controllo_posto(struct posto cine[3][3]);
void menu();
_______________________________________________

ora il file principale: x ora nn fate caso alle // sparse xchè ho fatto vari tentativi (inutil idirei )

#include <stdio.h>
//#include <stdlib.h>
#include "header.h"
//#include "funzioni.h"
//#include "header.h"
//#include <stdio.h>
// Funzioni
//
//Inizializza la struttura cinema a 0 (posti vuoti)
//con idPosto vettore della posizione
//
void inizializza_cinema(struct posto cine[3][3])
{
unsigned char i,j;
for(i='A';i<='C';i++)
{
for(j='1';j<='3';j++)
{
cine[i-'A'][j-'1'].flag=0;
cine[i-'A'][j-'1'].idPosto[0]=i;
cine[i-'A'][j-'1'].idPosto[1]=j;
cine[i-'A'][j-'1'].idPosto[2]='\0';
}
}
}
//
//Stampa posti non prenotati
//
void posti_vuoti(struct posto cine[3][3])
{
//system("clear");
unsigned char i,j;
printf("\n\n");
for(i='A';i<='C';i++)
{
printf("\n");
for(j='1';j<='3';j++)
{
if (cine[i-'A'][j-'1'].flag==0) printf("%s\t",cine[i-'A'][j-'1'].idPosto);
}
}
printf("\n\n");
//getchar();
}
//
//
//Controlla se il cinema è pieno
//e restituisce il numero dei posti vuoti
//
int cinema_pieno(struct posto cine[3][3])
{
int conta=0;
unsigned char i,j;
//
for(i='A';i<='C';i++)
{
for(j='1';j<='3';j++)
{
if(cine[i-'A'][j-'1'].flag==1) conta++;
}
}
return conta;
};
//
//assegna il posto alla persona
void assegna_posto(struct posto cine[3][3],unsigned char x,unsigned char y)
{
printf("\nil posto è vuoto lo riserviamo a voi!!");
cine[x-'A'][y-'1'].flag=1;
};
//
//Controlla i posti se sono assegnati oppure no
//
void controllo_posto(struct posto cine[3][3])
{
int flag_cinema_pieno;
unsigned char x,y;
printf("\nInserisci il posto che vuoi prenotare diviso da virgola, fila,posto :");
scanf("%c,%c",&x,&y);
while ((x<'A')||(x>'C')||(y<'1')||(y>'3'))
{
printf("\nPosto non disponibile");
printf("\nInserisci il posto che vuoi prenotare diviso da virgola, fila,posto :");
scanf("%c,%c",&x,&y);
}
fflush(stdin);
x=toupper(x);
y=toupper(y);
flag_cinema_pieno=cinema_pieno(cine);
if (flag_cinema_pieno!=9) //se il cinema nn è pieno
//controlla posto
{
if (cine[x-'A'][y-'1'].flag==0)
{ assegna_posto(cine,x,y);
}
else //il posto è già occupato
{
printf("\nIl posto è già prenotato");
printf("\nI posti liberi sono");
posti_vuoti(cine/*[3][3]*/);
//controllo_posto(cine);
/*printf("\nInserisci il posto che vuoi prenotare diviso da virgola, fila,posto :");
scanf("%c,%c",&x,&y);
fflush(stdin);
x=toupper(x);
y=toupper(y);
assegna_posto(cine,x,y);*/

}

}
else printf("Cinema pieno,oggi disco!!");
};
//
//stampa menu scelte opzioni
//
void menu()
{
//system("clear");
printf("\n");
printf("****************************\n");
printf("* MENU *\n");
printf("****************************\n");
printf("a) visualizza posti vuoti\n");
printf("b) prenota posto \n");
printf("c) disconnetti \n");
printf("\n inserisci scelta prego \n");
};



int main(int argc, char *argv[])
{
struct posto cinema[3][3];
char scelta[1];
inizializza_cinema(cinema);
posti_vuoti(cinema);
menu();
scanf("%s",scelta);
//printf("\n");
while (strcmp(scelta,"c")!=0)
{ //printf("\n");
if (strcmp(scelta,"a")==0) posti_vuoti(cinema);
else if (strcmp(scelta,"b")==0) controllo_posto(cinema);
else
{
printf("\nripeti scelta\n");
sleep(2);
}
menu();
scanf("%s",scelta);
}
return 0;
}


Mi serve una manona ,grazie a chiunque si interessi