Visualizzazione dei risultati da 1 a 4 su 4

Visualizzazione discussione

  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

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 © 2025 vBulletin Solutions, Inc. All rights reserved.