17/09/11 8:27
rubik90
buongiorno a tutti ragazzi! sono un nuovo utente del forum, scoperto per caso qualche mese fa "googlando" qua e là, e devo dire molto completo specialmente nella sezione del forum..ed arrivo al punto
premettendo che sono alle prime armi con la programmazione, devo realizzare un piccolo programmino in C che mi consenta di acquisire dei dati da tastiera e scriverli su un file binario (e l'ho fatto tramite la funzione inserisci), poi devo acquisire da tastiera alcuni dati per verificare, tramite la funzione ricerca, se i dati inseriti corrispondono a qualcuno all'interno del file precedentemente creato, e in ultimo stampare solo i dati di un determinato utente su un file di testo. dal punto di vista sintattico è ok, il compilatore non mi segnala alcun errore .. il problema risiede nella funzione ricerca, ho l'impressione che la condizione dell'if con la strcmp venga completamente ignorata poichè quando eseguo il programma e invoco la funzione ricerca, non mi dice come dovrebbe se l'utente c'è o meno nel file
ecco il codice :
ieri avevo anche provato, nella funzione inserisci, a dichiarare semplicemente un variabile strutturata di tipo cliente, per poi scrivere come argomenti della strcmp cliente.nome,nom .. ma anche questo non è servito
confido nel vostro aiuto e nella vostra disponibilità!
buona giornata!
EDIT BY HeDo: Ho inserito degli spazi all'interno della lunghissima formula del codice, in questo modo non sballi tutta la larghezza del forum...
premettendo che sono alle prime armi con la programmazione, devo realizzare un piccolo programmino in C che mi consenta di acquisire dei dati da tastiera e scriverli su un file binario (e l'ho fatto tramite la funzione inserisci), poi devo acquisire da tastiera alcuni dati per verificare, tramite la funzione ricerca, se i dati inseriti corrispondono a qualcuno all'interno del file precedentemente creato, e in ultimo stampare solo i dati di un determinato utente su un file di testo. dal punto di vista sintattico è ok, il compilatore non mi segnala alcun errore .. il problema risiede nella funzione ricerca, ho l'impressione che la condizione dell'if con la strcmp venga completamente ignorata poichè quando eseguo il programma e invoco la funzione ricerca, non mi dice come dovrebbe se l'utente c'è o meno nel file
ecco il codice :
#include <stdio.h> #include <conio.h> #include <string.h> #include <stdlib.h> typedef struct { char nome [20]; char cognome [20]; char corso [20]; int quota_mensile; int mesi_pagati; } cliente; void inserisci (); void stampasaldo(); void ricerca(); int main () { int flag=1; char c; do { fflush(stdin); printf ("\n Digita 1 per inserire un cliente nel file"); printf ("\n Digita 2 per calcolare e stampare il saldo di un cliente"); printf ("\n Digita 3 per trovare un cliente e stampare le informazioni relative su file di testo"); printf ("\n Digita 0 per uscire"); c=getch (); switch (c) { case '0': flag=0; break; case '1': inserisci(); break; case '2': stampasaldo(); break; case '3': ricerca (); break; } } while (flag); return 0; } //Funzione di inserimento del cliente nel file void inserisci() { FILE *fp1; cliente sportivo; fp1 = fopen ("Circolo.dat","a+"); if(fp1==NULL) { printf("\n Impossibile aprire il file"); return; } else { printf("\n Digita il nome del cliente da inserire nel file: "); gets(sportivo.nome); printf("\n Digita il cognome da inserire nel file: "); gets (sportivo.cognome); printf("\n Digita il corso seguito dal cliente: "); gets(sportivo.corso); printf("\n Digita la quota mensile versata dal cliente: "); scanf("%d", &sportivo.quota_mensile); printf("\n Digita il numero di mesi pagati dal cliente: "); scanf("%d", &sportivo.mesi_pagati); fwrite(&sportivo,sizeof(cliente),1,fp1); } fclose(fp1); } //Funzione che stampa il saldo relativo a un particolare cliente del circolo sportivo void stampasaldo() { int saldo = 0; int i; cliente cristiani[10]; char nom [20]; char cogn [20]; char cors [20]; FILE *fp1; fp1 = fopen("Circolo.dat","r"); if(fp1==NULL) { printf("\n Impossibile aprire il file"); } else { fflush(stdin); printf("\n Inserire il nome del cliente di cui si desidera visualizzare il saldo: "); gets (nom); printf("\n Inserire il cognome del cliente di cui si desidera visualizzare il saldo: "); gets (cogn); printf("\n Inserire il corso del cliente di cui si desidera visualizzare il saldo: "); gets (cors); for (i=0; i<10; i++) { fread (&cristiani[i],sizeof(cliente),1,fp1) ; if( ( (strcmp(cristiani[i].nome, nom)) && (strcmp(cristiani[i].cognome, cogn)) && (strcmp(cristiani[i].corso, cors)) ) == 0) { saldo = saldo + (cristiani[i].quota_mensile) * (cristiani[i].mesi_pagati) ; printf ("\n Il saldo relativo al cliente %s\t%s\t e' il seguente: %d", nom, cogn, saldo); // exit (1); } } } fclose (fp1); } //Funzione che ricerca un particolare cliente e stampa su file di testo le informazioni ad esso relative void ricerca() { char Nome [20]; char Cognome [20]; char Corso [20]; int QuotaMens; int Codice; int MesiPagati; cliente sportivo; FILE *fp1; FILE *fp2; fp1 = fopen("Circolo.dat","r"); while(fread(&sportivo,sizeof(sportivo) ,1,fp1)){ if((strcmp(sportivo.nome,Nome)==0) && ((sportivo.cognome,Cognome)==0) && ((sportivo.corso,Corso)==0) && (QuotaMens==sportivo.quota_mensile) && (MesiPagati==sportivo.mesi_pagati)) { printf("%s\t", sportivo.nome); printf("%s\t", sportivo.cognome); printf("%s\t", sportivo.corso); printf("%f\t", sportivo.quota_mensile); printf("%d\t", sportivo.mesi_pagati); } //Scrittura dei risultati su file di testo fp2 = fopen("gasperini.txt", "w"); fprintf(fp2,"%s\t%s\t%s\t%%f\t%d\t", sportivo.nome,sportivo.cognome,sportivo.corso,sportivo.quota_mensile,sportivo.mesi_pagati); fclose(fp1); fclose(fp2); } }
ieri avevo anche provato, nella funzione inserisci, a dichiarare semplicemente un variabile strutturata di tipo cliente, per poi scrivere come argomenti della strcmp cliente.nome,nom .. ma anche questo non è servito
confido nel vostro aiuto e nella vostra disponibilità!
buona giornata!
EDIT BY HeDo: Ho inserito degli spazi all'interno della lunghissima formula del codice, in questo modo non sballi tutta la larghezza del forum...
Ultima modifica effettuata da HeDo 17/09/11 9:17
aaa