Composition86
11-11-2008, 11:38
Salve a tutti, sto utilizzando per la prima volta la struttura di strutture e ho qualche difficoltà:
//Programma che gestisce l'assegnazione dei corsi
#define DIMSTRINGA 25
#include <stdio.h>
#include <conio.h>
#include <ctype.h>
typedef tipoStringa[DIMSTRINGA]; //E' un vettore di DIMSTRINGA caratteri
typedef enum {basiDiDati, linguaggiDiProgrammazione, ingegneriaDelSoftware, algoritmi} tipoCorso;
typedef enum {lun, mar, mer, gio, ven} tipoGiornoSettimana;
typedef enum {A, B} tipoAula;
typedef struct lezione2 {
tipoCorso nomeCorso;
tipoStringa nomeDocente;
int numeroStudenti;
int oraInizio;
int oraFine;
} Lezione;
typedef struct lezioneaula {
Lezione lezione; //Struttura di struttura
tipoAula aula;
tipoGiornoSettimana giorno;
} lezioneAula;
tipoAula aula;
tipoGiornoSettimana giorno;
void init (lezioneAula [5][2]);
void main (void)
{
lezioneAula Archivio[5][2];
char scelta;
do {
init (Archivio);
printf ("\nVuoi ripetere il programma? (Premi 'n' per terminare il programma) ");
scelta=getche();
} while (tolower (scelta) != 'n');
}
void init (lezioneAula archivio[5][2])
{
for (giorno=lun ; giorno<=ven ; giorno++) {
for (aula=A ; aula<=B ; aula++) {
printf ("Digitare il nome del corso:\n");
scanf ("%s", archivio[giorno][aula].lezione.nomeCorso);
printf ("Digitare il nome del docente:\n");
scanf ("%s", archivio[giorno][aula].lezione.nomeDocente);
printf ("Digitare il numero degli studenti:\n");
scanf ("%d", &archivio[giorno][aula].lezione.numeroStudenti);
do {
printf ("Digitare gli orari di inizio e fine della lezione (tra le 9 e le 18):\n");
scanf ("%d%d", &archivio[giorno][aula].lezione.oraInizio, &archivio[giorno][aula].lezione.oraFine);
printf ("\n");
} while (&archivio[giorno][aula].lezione.oraInizio >= &archivio[giorno][aula].lezione.oraFine || &archivio[giorno][aula].lezione.oraInizio<9 || &archivio[giorno][aula].lezione.oraFine>18);
}
}
}
1) Il seguente programma dovrebbe immagazzinare ad esempio il nome di un corso di insegnamento con la seguente istruzione:
scanf ("%s", archivio[giorno][aula].lezione.nomeCorso);
con questa istruzione accedo ad una variabile di tipo "Lezione" chiamata "lezione", poi con il "." accedo al nome del corso.
Il programma mi permette di digitare la stringa, ma non la immagazzina per un qualche motivo.
2) Altra cosa che non capisco è il perchè devo ridichiarare
tipoAula aula;
tipoGiornoSettimana giorno;
all'esterno della struttura per poterle utilizzare nei due cicli for.
3) Inoltre, anche se è di secondaria importanza, mi dice "[C++ Warning] Unit1.c(60): W8069 Nonportable pointer conversion" relativamente all'ultima riga del programma, con il puntatore di scrittura che si ferma dopo i "<" e ">".
Chi mi può dare una mano? Grazie.
//Programma che gestisce l'assegnazione dei corsi
#define DIMSTRINGA 25
#include <stdio.h>
#include <conio.h>
#include <ctype.h>
typedef tipoStringa[DIMSTRINGA]; //E' un vettore di DIMSTRINGA caratteri
typedef enum {basiDiDati, linguaggiDiProgrammazione, ingegneriaDelSoftware, algoritmi} tipoCorso;
typedef enum {lun, mar, mer, gio, ven} tipoGiornoSettimana;
typedef enum {A, B} tipoAula;
typedef struct lezione2 {
tipoCorso nomeCorso;
tipoStringa nomeDocente;
int numeroStudenti;
int oraInizio;
int oraFine;
} Lezione;
typedef struct lezioneaula {
Lezione lezione; //Struttura di struttura
tipoAula aula;
tipoGiornoSettimana giorno;
} lezioneAula;
tipoAula aula;
tipoGiornoSettimana giorno;
void init (lezioneAula [5][2]);
void main (void)
{
lezioneAula Archivio[5][2];
char scelta;
do {
init (Archivio);
printf ("\nVuoi ripetere il programma? (Premi 'n' per terminare il programma) ");
scelta=getche();
} while (tolower (scelta) != 'n');
}
void init (lezioneAula archivio[5][2])
{
for (giorno=lun ; giorno<=ven ; giorno++) {
for (aula=A ; aula<=B ; aula++) {
printf ("Digitare il nome del corso:\n");
scanf ("%s", archivio[giorno][aula].lezione.nomeCorso);
printf ("Digitare il nome del docente:\n");
scanf ("%s", archivio[giorno][aula].lezione.nomeDocente);
printf ("Digitare il numero degli studenti:\n");
scanf ("%d", &archivio[giorno][aula].lezione.numeroStudenti);
do {
printf ("Digitare gli orari di inizio e fine della lezione (tra le 9 e le 18):\n");
scanf ("%d%d", &archivio[giorno][aula].lezione.oraInizio, &archivio[giorno][aula].lezione.oraFine);
printf ("\n");
} while (&archivio[giorno][aula].lezione.oraInizio >= &archivio[giorno][aula].lezione.oraFine || &archivio[giorno][aula].lezione.oraInizio<9 || &archivio[giorno][aula].lezione.oraFine>18);
}
}
}
1) Il seguente programma dovrebbe immagazzinare ad esempio il nome di un corso di insegnamento con la seguente istruzione:
scanf ("%s", archivio[giorno][aula].lezione.nomeCorso);
con questa istruzione accedo ad una variabile di tipo "Lezione" chiamata "lezione", poi con il "." accedo al nome del corso.
Il programma mi permette di digitare la stringa, ma non la immagazzina per un qualche motivo.
2) Altra cosa che non capisco è il perchè devo ridichiarare
tipoAula aula;
tipoGiornoSettimana giorno;
all'esterno della struttura per poterle utilizzare nei due cicli for.
3) Inoltre, anche se è di secondaria importanza, mi dice "[C++ Warning] Unit1.c(60): W8069 Nonportable pointer conversion" relativamente all'ultima riga del programma, con il puntatore di scrittura che si ferma dopo i "<" e ">".
Chi mi può dare una mano? Grazie.