Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [C] Problema fwrite, programma elenco scuola

    Salve,
    ho riscontrato un problema durante la programmazione di un esercizio dato dal mio professore di informatica. Sinceramente la sintassi credo sia giusta, solamente che il programma non funziona. Il problema è sulla fwrite in quanto non scrive nullla,non so per quale motivo. Vi allego il codice dove ho evidenziato il punto in cui c'è il bug, grazie per la disponibilità.

    codice:
    #include <iostream>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <conio.h>
    #include <time.h>
    void menu();
    void Inserisci();
    int numeromatricola();
    void Ricerca(int,bool&);
    void Visualizza();
    void ordina();
    int FileSize();
    char nomefile[]="scuola.dat";
    struct alunni {
              int matricola;
              char nome [20];
              char cognome[20];
              char classe [5];
           }p;
    FILE *f;
    int N;
    int main(){
           system("cls");
           f=fopen("scuola.dat","ab");
           bool fine=false,trovare=false;
           int l;
           char scelta;
           N=FileSize();
           do {
                   menu();
                   printf("Scelta:\t "); scelta=getche ();
                   printf("\n");
                  switch (scelta){
                         case '1': fclose(f);
                       Inserisci();
                                     break;
                         case '2': fclose(f);
                                                Visualizza();
                                      break;
           case '3': fclose(f);
                                               fflush(stdout);
                                               fflush(stdin);
                                                printf("Inserisci il numero di matricola dell'alunno da ricercare:\t");
                                                scanf("%d",&l);
                                                Ricerca(l,trovare);
                                                if(trovare){
                                                                           printf("Le informazioni dell'alunno sono:\nNumero                        Matricola:%d\tCognome:%s\n",p.matricola,p.cognome);
                                                                           printf("Nome:%s\tClasse:%s\n",p.nome,p.classe);
                                                           }
                                                else printf("L'alunno non e' presente nell'elenco\n");
                                     break;
    
                                     case '4': fine=true;
                                     break;
                                      default: printf("\nLa scelta effetuttata corrisponde a una funzione inesistente (da 1 a 2)\n");
                                     break;
                                     }
                                         f=fopen("scuola.dat","ab");
                               } while (!fine);
                            system ("pause");
                      }
    
    void menu () {
               printf("\t       SCUOLA    \n");
               printf("\t1. Inserisci Studente    \n");
               printf("\t2. Visualizza    \n");
               printf("\t3. Ricerca \n");
    printf("\t4. Fine \n") 
               }
    
    void Inserisci(){
                            f=fopen("scuola.dat","ab");
                             if(f==NULL) printf("NON RIESCO AD APRIRE IL FILE ");
                             printf("Inserisci il nome dell'alunno:\t");
                             gets(p.nome);
                             printf("Inserisci il cognome dell'alunno:\t");
                             gets(p.cognome);
                             printf("Inserisci la classe dell'alunno:\t");
                             gets(p.classe);
                             p.matricola=numeromatricola();
                             printf("Numero Matricola=%d\n",p.matricola);
                             printf("Ho scritto ben %d byte ",fwrite(&p,sizeof(struct alunni),1,f));
                             fclose(f);
                             N=FileSize();
                             if(N>1){
                             ordina();}
            }
    
    int numeromatricola(){
         srand(time(NULL));
         bool trovato=false;
         int ty;
         do{
         ty=rand()%1000+1;
         Ricerca(ty,trovato);
         }while(trovato);
         return ty;
         }
    
    void ordina(){
    alunni q;
    f=fopen("scuola.dat","r+b");
    int nrec=FileSize();
    bool scambio=false;
    int sup=nrec-1;
    do{
        sup--;
        scambio=false;
        for(int i=0; i<=sup; i++){
                     fseek(f,i*sizeof(alunni),SEEK_SET);
                     fread(&p,sizeof(alunni),1,f);
                     fseek(f,(i+1)*sizeof(alunni),SEEK_SET);
                     fread(&q,sizeof(alunni),1,f);
                     if(p.matricola>q.matricola) {
                                                 fseek(f,i*sizeof(q),SEEK_SET);                                             
                                                 fwrite(&q,sizeof(q),1,f);
                                                 fseek(f,(i+1)*sizeof(alunni),SEEK_SET);                                             
                                                 fwrite(&p,sizeof(alunni),1,f);
                                                 scambio=true;
                                                 }
                     }
        }while(scambio);
        fclose(f);
    }
    
    void Ricerca(int k,bool &trov){
         f=fopen("scuola.dat","rb");
         int c;
         int inf=0, sup=FileSize()-1;
         trov=false;
         while(inf<=sup && !trov){
                        c=(sup+inf)/2;
                        fseek(f,c*sizeof(alunni),SEEK_SET);
                        fread(&p,sizeof(alunni),1,f);
                        if(k>p.matricola) inf=c+1;
                        else
                            if(k<p.matricola) sup=c-1;
                            else              trov=true;
                            }
         fclose(f);
         }
    
    int FileSize(){
        fseek(f,0,SEEK_END);
        int w=ftell(f);
        return w/sizeof(alunni);
    }
    
    void Visualizza(){
        system("cls");
        f=fopen("scuola.dat","rb");
        fseek(f,0,SEEK_SET);
        printf("\t\t\tElenco:");
        while(fread(&p,sizeof(alunni),1,f)) {
        printf("\n\tNumeroMatricola: %d\t Cognome:%s\n\tNome: %s\tClasse:%s\n \n",p.matricola,p.cognome,p.nome,p.classe);}
        fclose(f);
        system("pause");
    }
    Ultima modifica di LeleFT; 20-02-2015 a 13:39 Motivo: Aggiunti i tag CODE

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Usa i tag CODE per il codice altrimenti si rinuncia a rispondere ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    @fabio1234
    Quando posti del codice, ricordati di inserirlo all'interno degli appositi tag [CODE] ... [/CODE], così da mantenere indentazione e formattazione del codice, che altrimenti risulta piuttosto difficile da leggere.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  4. #4
    Quote Originariamente inviata da LeleFT Visualizza il messaggio
    @fabio1234
    Quando posti del codice, ricordati di inserirlo all'interno degli appositi tag
    codice:
     ...
    , così da mantenere indentazione e formattazione del codice, che altrimenti risulta piuttosto difficile da leggere.


    Ciao.
    Si non ci ero riuscito, grazie per avermelo modificato

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.