PuNkEtTaRo
29-08-2007, 22:55
Ciao a tutti ragazzi,
è la prima volta che scrivo in questa sezione del forum...ma questo è il mio primo programma in C...
Praticamente ho creato una matrice dinamica che dopo ho riempito con delle struct.
Il problema è che non riesco a scrivere ai limiti della matrice...
Mi spiego meglio:
se creo una matrice 4x4, non riesco a scrivere dove sono gli zeri in rosso....
0000 ovviamente con [0][3]...
0000 qui con [1][3]...e così via
0000
0000
questo è il sorgente:
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
unsigned int IsReserved;
int ReservationNumber;
} Seat;
Seat **Cinema;
int rowNum, seatPerRow;
int main(int argc, char **argv) {
int i,j;
FILE *fp = fopen("mappa.dat","rb");
if (fp==NULL) {
fp=fopen("mappa.dat","wb+");
printf("Inserisci il numero di file del cinema ");
scanf("%d",&rowNum);
printf("Inserisci il numero di posti per fila del cinema ");
scanf("%d",&seatPerRow);
fwrite(&rowNum,sizeof(int),1,fp);
fwrite(&seatPerRow,sizeof(int),1,fp);
Cinema=malloc(rowNum*sizeof(Seat *));
if (Cinema == NULL) {
printf("Error: malloc could not allocate %d bytes for Cinema\n", rowNum*sizeof(int *));
return (-1);
}
for (i = 0; i < rowNum; i++) {
Cinema[i]=malloc(seatPerRow*sizeof(Seat));
}
for(i=0;i<rowNum;i++) {
for(j=0;j<seatPerRow;j++) {
Cinema[i][j].IsReserved=0;
Cinema[i][j].ReservationNumber=0;
}
}
Cinema[3][4].IsReserved=1; //perche' non va?
fwrite(Cinema,sizeof(Seat),rowNum*seatPerRow,fp);
fclose(fp);
for (i = 0; i < seatPerRow; i++) {
free(Cinema[i]);
}
free(Cinema);
}
else {
fread(&rowNum,sizeof(int),1,fp);
fread(&seatPerRow,sizeof(int),1,fp);
Cinema=malloc(rowNum*sizeof(Seat *));
if (Cinema == NULL) {
printf("Error: malloc could not allocate %d bytes for Cinema\n", rowNum*sizeof(int *));
return (-1);
}
for (i = 0; i < rowNum; i++) {
Cinema[i]=malloc(seatPerRow*sizeof(Seat));
}
fread(Cinema,sizeof(Seat),rowNum*seatPerRow,fp);
fclose(fp);
printf("%d %d\n",rowNum,seatPerRow);
for(i=0;i<rowNum;i++) {
for(j=0;j<seatPerRow;j++) {
printf("%d ",Cinema[i][j].IsReserved);
}
printf("\n");
}
}
/*for (i = 0; i < seatPerRow; i++) {
free(Cinema[i]);
}
free(Cinema);*/
return (0);
}
Grazie a tutti in anticipo...
Ciao
è la prima volta che scrivo in questa sezione del forum...ma questo è il mio primo programma in C...
Praticamente ho creato una matrice dinamica che dopo ho riempito con delle struct.
Il problema è che non riesco a scrivere ai limiti della matrice...
Mi spiego meglio:
se creo una matrice 4x4, non riesco a scrivere dove sono gli zeri in rosso....
0000 ovviamente con [0][3]...
0000 qui con [1][3]...e così via
0000
0000
questo è il sorgente:
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
unsigned int IsReserved;
int ReservationNumber;
} Seat;
Seat **Cinema;
int rowNum, seatPerRow;
int main(int argc, char **argv) {
int i,j;
FILE *fp = fopen("mappa.dat","rb");
if (fp==NULL) {
fp=fopen("mappa.dat","wb+");
printf("Inserisci il numero di file del cinema ");
scanf("%d",&rowNum);
printf("Inserisci il numero di posti per fila del cinema ");
scanf("%d",&seatPerRow);
fwrite(&rowNum,sizeof(int),1,fp);
fwrite(&seatPerRow,sizeof(int),1,fp);
Cinema=malloc(rowNum*sizeof(Seat *));
if (Cinema == NULL) {
printf("Error: malloc could not allocate %d bytes for Cinema\n", rowNum*sizeof(int *));
return (-1);
}
for (i = 0; i < rowNum; i++) {
Cinema[i]=malloc(seatPerRow*sizeof(Seat));
}
for(i=0;i<rowNum;i++) {
for(j=0;j<seatPerRow;j++) {
Cinema[i][j].IsReserved=0;
Cinema[i][j].ReservationNumber=0;
}
}
Cinema[3][4].IsReserved=1; //perche' non va?
fwrite(Cinema,sizeof(Seat),rowNum*seatPerRow,fp);
fclose(fp);
for (i = 0; i < seatPerRow; i++) {
free(Cinema[i]);
}
free(Cinema);
}
else {
fread(&rowNum,sizeof(int),1,fp);
fread(&seatPerRow,sizeof(int),1,fp);
Cinema=malloc(rowNum*sizeof(Seat *));
if (Cinema == NULL) {
printf("Error: malloc could not allocate %d bytes for Cinema\n", rowNum*sizeof(int *));
return (-1);
}
for (i = 0; i < rowNum; i++) {
Cinema[i]=malloc(seatPerRow*sizeof(Seat));
}
fread(Cinema,sizeof(Seat),rowNum*seatPerRow,fp);
fclose(fp);
printf("%d %d\n",rowNum,seatPerRow);
for(i=0;i<rowNum;i++) {
for(j=0;j<seatPerRow;j++) {
printf("%d ",Cinema[i][j].IsReserved);
}
printf("\n");
}
}
/*for (i = 0; i < seatPerRow; i++) {
free(Cinema[i]);
}
free(Cinema);*/
return (0);
}
Grazie a tutti in anticipo...
Ciao