Ciao a tutti,
sono studente di Ingegneria e mi sto preparando per l'esame di programmazione in C.
diciamo che ho qualche problema con il funzionamento dei programmi che scrivo che fanno uso di puntatori e vettori.
in particolare ecco il programma in questione:
1) Un programma in linguaggio C deve gestire i dati degli studenti di un corso di
laurea. Ogni studente è rappresentato da nome (max 20 caratteri), cognome (max
30 caratteri), matricola (numero intero) e dai voti ricevuti negli esami sostenuti. Il
numero di esami totali che devono essere sostenuti prima della laurea è dato dalla
costante NUMES definita mediante la direttiva #define. Per rappresentare un
voto si utilizza il tipo di dati struct voto, definito come segue:
struct voto{
int cod_esame; // codice esame, strettamente positivo
char voto; // voto conseguito
};
Il codice esame identifica univocamente un corso (es. Informatica e
Programmazione avrà un codice diverso da Chimica).
Per rappresentare l’insieme di studenti di un corso di laurea in un anno
accademico, si utilizza il tipo di dato struct annata, che memorizza l’anno di
corso (es. 2013) e l’insieme degli studenti (fino ad un massimo MAXST, costante
definita mediante la direttiva #define.)
QUESITO 1: si scriva la definizione dei tipi di dato struct studente e struct
annata corrispondenti alla descrizione sopra.
QUESITO 2: si scriva la funzione
void instudente(struct studente *s);
che acquisice da tastiera i dati di uno studente AD ECCEZIONE dei voti ricevuti
negli esami.
QUESITO 3: si scriva la funzione
void inAnnata(struct annata *s);
che acquisice da tastiera i dati degli studenti di una annata (senza i voti ricevuti
negli esami) utilizzando la funzione definita al punto precedente.
QUESITO 4: si sviluppi un programma main che, utilizzando opportune variabili,
acquisisce da tastiera i dati di una annata (senza gli esami sostenuti dagli
studenti).
Successivamente, il programma deve acquisire da tastiera una serie di triple
(matricola, codice, voto) ciascuna delle quali indica che lo studente avente
matricola matricola ha ottenuto la valutazione positiva pari a voto nell’esame
avente codice codice (codice=0 indica la fine della serie): il programma deve
memorizzare i voti ottenuti dagli studenti nella struttura dati di tipo struct
annata. [24]
per il primo punto nessun problema, pensavo così anche per il secondo, dev c++ compila correttamente.
attivandosi la funzione "instudente" va tutto bene fino a quando mi chiede di inserire il numero voti che il programma si blocca.
ecco il testo:
#include <stdio.h>
#include <stdlib.h>
struct voto{
int cod_esame;
char voto;
};
struct studente{
char nome[20];
char cognome[30];
int matricola;
int numerovoti;
int voto[30]; //in realtà definito da una direttiva #define
};
struct annata{
int anno;
struct studente studenti [10]; // in realtà definito da una direttiva #define
};
void instudente(struct studente *s);
void inAnnata(struct annata *s);
int main(int argc, char *argv[])
{
struct studente a;
instudente(&a);
system("PAUSE");
return 0;
}
void instudente (struct studente *s){
printf("inserisci il nome dello studente\n");
scanf("%s",(*s).nome);
printf("inserisci il cognome dello studente\n");
scanf("%s",(*s).cognome);
printf("inserisci il numero di matricola\n");
scanf("%d",(*s).matricola);
printf("inserisci il numero di voti\n");
scanf("%d",(*s).numerovoti);
// scanf("%d",&s->numerovoti); analogo
}
da cosa può essere dato il problema?
più che altro che non penso di aver sbagliato, ho è il compilatore che è matto (lo dubito) o c'è qualche errore...
mi sapreste aiutare?
grazie