Salve, sono un ragazzo di terza superiore. Potreste aiutarmi, sto trovando qualche problema nella funzione cerca.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define NMAX 120
typedef struct{
int gg; int mm; int aa;
char nome[30];
char cognome[30];
int matricola;
}TDati;
//PROTOTIPO
void legge(TDati v[],int *n);
int conta(TDati v[],int n);
void cerca(TDati v[],int n);
void ordina(TDati v[],int n);
void visualizza(TDati v[],int n);
void menu();
//MAIN
int main() {
TDati v[NMAX];
int n=0,a;
do{
do{
menu();
printf("\nQuale scegli? ");
scanf("%d",&a);
printf("\n-------------------\n");
switch(a) {
case 1: legge(v,&n); break;
case 2:
if(n==0) {
printf("\nCarica i dati!\n");
}else{
conta(v,n);
}
break;
case 3:
if(n==0) {
printf("\nCarica i dati!\n");
}else{
cerca(v,n);
}
break;
case 4:
if(n==0) {
printf("\nCarica i dati!\n");
}else{
visualizza(v,n);
}
break;
}
}while(a<1 || a>5);
}while(a!=5);
return 0;
}
//IMPLEMENTAZIONE DELLE FUNZIONI
//LEGGE
void legge(TDati v[],int *n) {
int i;
char r[100];
char da[11], no[31], co[31], ma[7];
char gg[3], mm[3], aa[5];
FILE *fp;
fp=fopen("prenotazioni.txt","r");
i=0;
while(!feof(fp)){
fgets(r,100,fp);
sscanf(r,"%[^';'];%[^';'];%[^';'];%[^'\n']",da,no,co,ma);
strcpy(v[i].cognome,co);
strcpy(v[i].nome,no);
v[i].matricola=atoi(ma);
sscanf(da,"%[^'/']/%[^'/']/%[^'\0']",gg,mm,aa);
v[i].gg=atoi(gg);
v[i].mm=atoi(mm);
v[i].aa=atoi(aa);
i++;
}
fclose(fp);
*n=i;
}
//CONTA
int conta(TDati v[],int n) {
int i,cnt=0,grn,mes,ann;
printf("\nQuale giorno? ");
scanf("%d",&grn);
printf("Quale mese? ");
scanf("%d",&mes);
printf("Quale anno? ");
scanf("%d",&ann);
for(i=0;i<n;i++) {
if((grn==v[i].gg) && (mes==v[i].mm) && (ann==v[i].aa))
cnt++;
}
if(cnt!=0) {
printf("\nNumero studenti prenotati: %d\n",cnt);
}else{
printf("\nNessuno studente prenotato\n");
}
}
//ORDINA
void ordina(TDati v[],int n) {
TDati t;
int i,j;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(v[i].matricola>v[j].matricola) {
t=v[i];
v[i]=v[j];
v[j]=t;
}
}
//CERCA
void cerca(TDati v[],int n) {
int j,ctr=0,cmd;
int pf=n-1, pi=0, pm;
ordina(v,n);
printf("\nInserisci codice matricola: ");
scanf("%d",&cmd);
pm=(pf-pi)/2;
do{
if(cmd==v[pi].matricola) {
j=pi;
}
if(cmd==v[pf].matricola) {
j=pf;
}
if(cmd==v[pm].matricola) {
j=pm;
}
if(cmd>v[pm].matricola) {
pi=pm+1;
pm=pi+(pf-pi)/2;
j=pm;
}
if(cmd<v[pm].matricola) {
pf=pm-1;
pm=pi+(pf-pi)/2;
j=pm;
}
}while(pf>pi);
printf("\nNome: %s\n",v[j].nome);
printf("Cognome: %s\n",v[j].cognome);
printf("Prenotazione: %d/%d/%d\n",v[j].gg,v[j].mm,v[j].aa);
}
//MENU
void menu() {
printf("\n-------------------\n");
printf("1- Legge\n");
printf("2- Conta\n");
printf("3- Cerca\n");
printf("4- Visualizza\n");
printf("5- FINE");
printf("\n-------------------\n");
}
//VISUALIZZA
void visualizza(TDati v[],int n) {
int i;
for(i=0;i<n;i++) {
printf("\n---------------------------\n");
printf("\nNome: %s\n",v[i].nome);
printf("Cognome: %s\n",v[i].cognome);
printf("Codice matricola: %d\n",v[i].matricola);
printf("Prenotazione: %d/%d/%d\n",v[i].gg,v[i].mm,v[i].aa);
printf("\n---------------------------\n");
}
}
Allegati: