[C]Ricerca

pinox1
ciao a tutti ,ho difficoltà ha svolgere la ricerca nella prog.C:
ad esempio in questo caso mi stampa a video tutto ciò che è presente nel file ,non considerando la mia condizione.
potete aiutarmi a capire dove sbaglio?grazie

void ricerca(FILE **g)
{
//prenotazione datiletti;
prenotazione mia_prenotazione; // MODIFIACA inserisco la variabile locale mia_prenotazione

int k=0;
fseek(*g,0L, SEEK_SET);

while(fread(&mia_prenotazione,sizeof(prenotazione),1, *g)>0)
{
if(mia_prenotazione.anno>=0 && mia_prenotazione.anno<=1)
k ++;
printf("\n******************************************************\n");
printf("\t%s",mia_prenotazione.aula);
printf("\t%s",mia_prenotazione.docente);
printf("\t%s\n",mia_prenotazione.nome_esame);

printf("\n******************************************************\n");

}
//fclose(fp); MODIFICA elimino la cciusura del file
}

Risposte
raff5184
scusa, se ho ben capito prenotazione.anno può assumere valori compreesi tra 0 e 1?

pinox1
in pratica devo cercare solo le informazioni delle aule solo per il primo anno.
grazie per l'aiuto :wink:

apatriarca
Ma il test non dovrebbe allora semplicemente essere mia_prenotazione.anno == 1? Non ci sono le parentesi graffe intorno al corpo del tuo if, in questo modo stampi le informazioni della prenotazione sempre. incrementando però il valore k solo quando si tratta di un esame del primo anno.

pinox1
grazie per il consiglio.
ti posto il programma che stò provando per intero
//***************************************************************************************//
// *//
//09_05_2010 *//
// *//
//si rediga un programma in C di gestione prenotazione aule *//
//struttura contiene: *//
//-->aula (char) *//
//-->nome esame(char 30) *//
//-->cognome docente(char 30) *//
//-->anno corso(int) *//
//-->ora inizio lezione(int ora int minuti) *//
//-->tempo della prova(int) *//
//Richiesta: *//
//1)INSERIMENTO NUOVI RECORD *//
//2)VISUALIZZARE A VIDEO DI TUTTE LE PRENOTAZIONI QUELLE DEL PRIMO ANNO *//
//3)VISUALIZZARE A VIDEO LE AULE PRENOTATE NELLA FASCIA ORARIA DALLE 10:00 ALLE 13:00 *//
//***************************************************************************************//

#include
#include
#include



typedef struct prenotazione
{
char aula[3];
char nome_esame[30];
char docente[30];
int anno;
int ora;
int minuti;
int tempo_prova;
}prenotazione;
prenotazione mia_prenotazione;


//prototipo delle funzioni//

void inserimento(FILE **); // MODIFICA in tutte le funzioni
void ricerca(FILE **); // passo il riferimento al file di lavoro.
void visualizza(FILE **);
void SvuotaBuffer();

int main(int argv, char *argc[])
{
int operazione;
char percorso[]="C:\\file.txt";
FILE *fp;
fp=fopen(percorso,"r+b"); /*fp=fopen("C:\\File.txt","r+b"); apertura file modalità binaria in scrittura e lettura*/
if (!fp)
{
// Se il file non esiste
fp=fopen(percorso, "wb+");
if (!fp)
{
printf("Impossibile aprire il file\n");
return 0; // MODIFRCA il file viene aperto solo i modalità di lettura e scrittura
}
}
do
{
printf("SCEGLI OPERAZIONE");
printf("\n******************************************************\n");
printf("\n1: INSERIMENTO prenotazione\n");
printf("\n2: VISUALIZZA INFO prenotazioni primo anno di corso\n");
printf("\n3: VISUALIZZA AULE prenotate dalle 10:00 alle 13:00\n");
printf("\n4: E. S. C.\n");
printf("\n******************************************************\n");
scanf("%d",&operazione);
system("pause");
switch(operazione)
{
case 1:{
inserimento(&fp);
break;
}
case 2:{
ricerca(&fp);
break;
}
case 3:{
visualizza(&fp);
break;
}
}
} while (operazione<=3);// while(operazione!='3'); // modifica cambio della condizione d' ucsita

fclose(fp);

return 0;
}
void inserimento(FILE **g)
{

SvuotaBuffer();
prenotazione mia_prenotazione;
printf("\n inserire aula\n");
scanf("%s", &mia_prenotazione.aula);
printf("\n inserire nome esame\n");
scanf("%s", &mia_prenotazione.nome_esame);
printf("\n inserire nome docente\n");
scanf("%s", &mia_prenotazione.docente);
printf("\n inserire anno di corso\n");
scanf("%d",&mia_prenotazione.anno);
printf("\n inserire ora e minuti inizio lezione\n");
scanf("%d" "%d",&mia_prenotazione.ora,&mia_prenotazione.minuti);
printf("\n inserire durata prova\n");
scanf("%d" ,&mia_prenotazione.tempo_prova);

fwrite(&mia_prenotazione,sizeof(prenotazione),1, *g);

}

void ricerca(FILE **g)
{
FILE *fp;
fp=fopen(percorso,"r");
//prenotazione datiletti;
prenotazione mia_prenotazione; // MODIFIACA inserisco la variabile locale mia_prenotazione



while(fread(&mia_prenotazione,sizeof(prenotazione),1, *g)>0)
{
if(mia_prenotazione.anno==1)

printf("\n------------------------------------------------------\n");
printf("\t%s",mia_prenotazione.aula);
printf("\t%s",mia_prenotazione.docente);
printf("\t%s\n",mia_prenotazione.nome_esame);
printf("\n------------------------------------------------------\n");
}
}
void visualizza(FILE **g)
{
prenotazione mia_prenotazione; // MODIFIACA inserisco la variabile locale mia_prenotazione
fseek(*g,0L, SEEK_SET);
// while(fread(&mia_prenotazione, sizeof(prenotazione), 1 , **g)!= EOF) MODIFICA cambio la condizione d' uscita del file
while (!feof( *g))
{
// if(mia_prenotazione.ora>=10 && mia_prenotazione.anno<=13) MODIFICA Cambio la condizione if
fread(&mia_prenotazione, sizeof(prenotazione), 1 , *g);
if(mia_prenotazione.ora>=10 && mia_prenotazione.ora<=13)
{
printf("\t%s",mia_prenotazione.aula);
printf("\t%s",mia_prenotazione.docente);
printf("\t%s\n",mia_prenotazione.nome_esame);

}
}
//fclose(fp); MODIFICA elimino la cciusura del file
}

void SvuotaBuffer() // MODIFICA aggiungo una piccola funzione per svuotare il buffer.
{
while (getchar() != '\n') ;
}
//*******************************************//
/*#include
#include
#include
#define N20
FILE * fp;

typedef struct
{
char aula[3];
char nome_esame[30];
char docente[30];
int anno;
int ora;
int minuti;
int tempo_prova;
}prenotazione;

prenotazione mia_prenotazione;
//prototipo delle funzioni//

void inserimento();
void ricerca();
void visualizza();
int main()
{
int operazione;
fp=fopen("C:\\File.txt","r+b"); /*apertura file modalità binaria in scrittura e lettura*/
/*if (!fp) //equivale a :if(fp=(fopen(..,..)==NULL)
{

fp=fopen("C:\\File.txt","w+b"); // Apre o crea un file binario in lettura e scrittura//
if (!fp)
{
printf("Impossibile aprire il file\n");
exit(1);
}
}
do
{
printf("SCEGLI OPERAZIONE");
printf("\n******************************************************\n");
printf("\n1: INSERIMENTO prenotazione\n");
printf("\n2: VISUALIZZA INFO prenotazioni primo anno di corso\n");
printf("\n3: VISUALIZZA AULE prenotate dalle 10:00 alle 13:00\n");
printf("\n4: E. S. C.\n");
printf("\n******************************************************\n");
scanf("%d",&operazione);
switch(operazione)
{
case 1:
inserimento();
break;
case 2:
ricerca();
break;
case 3:
visualizza();
break;
}}
while(operazione!='3');
fclose(fp);

return 0;
}
void inserimento(void)
{
FILE *fp;
fflush(stdin);
if((fp=fopen("C:\\File.txt","a"))==NULL)

{
printf("\nimpossibile aprire il file");
exit(1);
}
else
{
printf("\n inserire aula\n");
scanf("%s",mia_prenotazione.aula);
printf("\n inserire nome esame\n");
scanf("%s",mia_prenotazione.nome_esame);
printf("\n inserire nome docente\n");
scanf("%s",mia_prenotazione.docente);
printf("\n inserire anno di corso\n");
scanf("%d",&mia_prenotazione.anno);
printf("\n inserire ora e minuti inizio lezione\n");
scanf("%d" "%d",&mia_prenotazione.ora,&mia_prenotazione.minuti);
printf("\n inserire durata prova\n");
scanf("%d" ,&mia_prenotazione.tempo_prova);
fflush(stdin);
fwrite(&mia_prenotazione,sizeof(prenotazione),1,fp);

}
fclose(fp);
}

void ricerca()
{
prenotazione datiletti;

int k=0;
FILE *fp;
fp=fopen("C:\\File.txt","r");
fseek(fp,0L, SEEK_SET);
while(fread(&mia_prenotazione,sizeof(prenotazione),1,fp)>0)
{
if(mia_prenotazione.anno>=0 && mia_prenotazione.anno<=1)
k ++;
printf("\n******************************************************\n");
printf("\t%s",mia_prenotazione.aula);
printf("\t%s",mia_prenotazione.docente);
printf("\t%s\n",mia_prenotazione.nome_esame);

printf("\n******************************************************\n");
}
fclose(fp);
}

void visualizza()
{
FILE *fp;
fp=fopen("C:\\File.txt","r");
fseek(fp,0L, SEEK_SET);
while(fread(&mia_prenotazione,sizeof(prenotazione),1,fp)==1)
{
if(mia_prenotazione.ora>=10 && mia_prenotazione.anno<=13)
printf("\t%s",mia_prenotazione.aula);
printf("\t%s",mia_prenotazione.docente);
printf("\t%s\n",mia_prenotazione.nome_esame);
}
fclose(fp);
}*/

pinox1
scusa
ti ho messo le due versioni...
:oops:

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.