Ho bisogno di capire perché non funziona questo codice, si tratta di un programmino che gestisce una segreteria di studenti e l'utente può inserire,cancellare,cercare ecc..uno studente. nella funzione ricerca però quando vado a inserire questa riga di codice "*ps=cerca(matricola, n);" mi da un bel po di errori e non capisco perché.potreste aiutarmi?
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#define MAX 30
typedef struct {
char nome[MAX];
char cognome[MAX];
int matricola;
int voto; } studente;
studente studenti[230];
int main ()
{
system("color A1");
int posizione=0, i, k, e;
int scelta=stampa_menu();
do{
switch(scelta){
case 0:
posizione= aggiungi_studente(posizione);
system("cls");
scelta=stampa_menu();
break;
case 1:
system("cls");
scelta=stampa_menu();
break;
case 2:
visualizza_tutto(posizione);
system("pause");
system("cls");
scelta=stampa_menu();
break;
case 3:
system("cls");
scelta=stampa_menu();
break;
}
}while (scelta!=5);
system("pause");
return 0;
}
////////////////////////////////////////////////////////////////////////////////
void visualizza(studente *pt, int posizione) {
printf("\n---------------\n");
printf("Cognome: %s\n", pt->cognome);
printf("Nome: %s\n", pt->nome);
printf("Numero matricola: %d\n", pt->matricola);
printf("---------------\n");
}
////////////////////////////////////////////////////////////////////////////////
int visualizza_tutto(int pos){
int i=0;
studente *ps= &studenti[0];
for(i=0; i<pos;i++)
visualizza(ps++, pos);
}
////////////////////////////////////////////////////////////////////////////////
int aggiungi_studente(int posizione){
printf("\n\t\tINSERIMENTO STUDENTE.\n\n");
printf("Inserisci il cognome dello studente: "); scanf("%s",studenti[posizione].cognome);
printf("Inserisci il nome dello studente: "); scanf("%s",studenti[posizione].nome);
printf("Inserisci il numero della matricola: "); scanf("%d", &studenti[posizione].matricola);
posizione++;
return(posizione);
}
////////////////////////////////////////////////////////////////////////////////
void ricerca(n) {
int i, matricola;
studente *ps;
printf("\n\t\tRICERCA DELLO STUDENTE.\n\n");
printf("Inserisci il numero della matricola da ricercare: ");
scanf("%d", &matricola);
*ps=cerca(matricola, n);
//if(ps==NULL)
//printf("Lo studente non e' presente in archivio.\n");
//visualizza(ps, posizione);
}
////////////////////////////////////////////////////////////////////////////////
studente *cerca(int mat, int posizione) {
int i;
for(i=0; i<posizione; i++)
if(studenti[i].matricola==mat)
return(&studenti[i]);
else
return(NULL);
}
////////////////////////////////////////////////////////////////////////////////
int stampa_menu(void)
{
char voci[6][50] = {
"0 Aggiungi studente.",
"1 Cancella studente.",
"2 Visualizza tutti gli studenti.",
"3 Ricerca studente.",
"4 Studenti che non hanno sostenuto esami.",
"5 Exit."
};
int scelta, numVoci;
numVoci = 6;
scelta = menu("usa le frecce per selezionare una voce, premi invio per confermare", voci, numVoci);
return scelta;
}
int menu(char *titolo, char voci[6][50], int numVoci) {
int i;
int pos = 0;
char ch;
int scelta = -1;
do {
system("cls");
printf("%s\n", titolo);
for (i = 0; i < numVoci; i++) {
if (pos == i) {
printf("->");
}
else {
printf(" ");
}
printf(" %s", voci[i]);
printf("\n");
}
ch = getch();
if (ch < 0) {
ch = getch();
switch(ch) {
case 80:
pos = (pos + 1) % numVoci;
break;
case 72:
pos--;
if (pos < 0) {
pos = numVoci - 1;
}
break;
}
}
else {
if (ch == 13) {
scelta = pos;
}
}
}
while (scelta < 0);
return scelta;
}