Visualizzazione dei risultati da 1 a 4 su 4

Visualizzazione discussione

  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2020
    Messaggi
    1

    [C] Apertura di un file e operazioni su automobili

    Salve ho scritto questo programma per scuola (ho iniziato da poco a scrivere c quindi abbiate pietà) ma ho diversi problemi tra cui:
    - Se faccio un inserimento, la visualizzazione e poi un altro inserimento, la seconda auto sovrascrive la prima
    -Il programma chiude quando gli dico di caricare il file

    E non capisco davvero dove sbaglio.
    Grazie in anticipo per l'aiuto

    PROGRAMMA:


    codice:
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    
    #define N 10
    #define B 4
    
    
    
    
      
    typedef struct {
          char cognome[20];
          char nome[20]; 
    } nomi;  
    
    
    typedef struct {
      char marca[20];
      char modello[20];
      int anno;
      int prezzo;
      char targa [7];
      nomi proprietari [B];   
    } automobili;
    
    
    int main() {
         int c=0,i,n,anno,tot=0;                    //c = Numero proprietari            n = Numero di Auto
         automobili autosalone[N];
         char marca[20];
          FILE *pf;
          FILE * fp; // Per usare il file
          int scelta = 0, cancello;
         
         
         do {
    
    
            printf("\n 1) Inserimento\n 2) Cancellazione\n 3) Ordinamento\n 4) Visualizza risultati\n 5) Salva\n 6) Carica da file\n 0) Esci\n: ");
                scanf("%d", &scelta);
                switch (scelta) {
                    case 1:
                        do{
                            printf("Quante auto vuoi inserire?: ");
                            scanf("%d", &n);
                                    
                            if (n>N)
                                printf ("Posso inserire solo 10 auto\n\n");
                            if (n<1)
                                printf ("Non puoi inserire 0 auto\n\n");
                                        
                        } while (n<1 || n>N);
                                
                              
                            for(i=0; i<n; i++){
                                        
                                printf("\nAuto %d\n", i+1);
                                printf("\nMarca: ");
                                    scanf("%s", autosalone[i].marca);
                                printf("\nModello: ");
                                    scanf("%s", autosalone[i].modello);
                                printf("\nTarga (GENTILMENTE TUTTA ATTACCATA): ");
                                    scanf("%s", autosalone[i].targa);
                                         
                                do {
                                    printf("\nPrezzo: ");
                                           scanf("%d", &autosalone[i].prezzo);
                                           
                                    if ((autosalone[i].prezzo) <= 1)
                                        printf ("Non puoi non aver pagato la tua auto\n\n");
                                        
                                } while ((autosalone[i].prezzo) <= 1);
                            
                                    
                                do  {
                                    printf("\nAnno immatricolazione: ");
                                        scanf("%d", &autosalone[i].anno);
                                        
                                    if ((autosalone[i].anno)<1900)
                                        printf ("La targa non puo' esser stata immatricolata cosi' tanti anni fa'\n");
                                        
                                    if ((autosalone[i].anno)<1990 && (autosalone[i].anno)>1901)                                        // || &&
                                        printf ("\nComplimenti, hai proprio una bella auto d'epoca\n");
                                        
                                    if ((autosalone[i].anno)>2020)
                                        printf ("La targa non puo' esser stata immatricolata nel futuro\n\n");
                                        
                                } while ((autosalone[i].anno)<1900 && (autosalone[i].anno)>2020);                                    // || &&
                                    
                                    
                                do {
                                    printf("\nQuanti proprietari ha l'auto?: ");
                                        scanf("%d", &c);
                                    if (c>3)
                                        printf ("\nL'auto non puo' avere piu' di 3 proprietari\n\n");
                                }while (c>3);
                                        
                                for (int j = 0; j<c; j++) {
                                    printf("\nNome del %d^ proprietario: ", j+1);
                                        scanf("%s", autosalone[i].proprietari[j].nome);
                                        
                                    printf("\nCognome del %d^ proprietario: ", j+1);
                                        scanf("\n%s", autosalone[i].proprietari[j].cognome);
                                        
                            }
                                } break;
                        
                    case 2:
                    
                        do {
                
                            printf ("Quale posizione vuoi cancellare? ");
                                scanf ("\n%d", &cancello);
                
                        } while ((cancello< 0) || (cancello > n));
            
                        for (int i = cancello ; i < n; i++) {
                    
                            autosalone[i] = autosalone [i-1];                            //cancellazione e spostamento degli elementi nel vettore
                        }
                        n--;
                    
                    break;
                    
                    case 3: // Ordinamento non ottimizzato
                        for (int i=0; i<n; i++) { // ripeto il ciclo numFrutti volte
                            for (int j=0; j<n-1; j++) { // Confronta le coppie
                                if (strcmp(autosalone[j].proprietari[j].nome, autosalone[j+1].proprietari[j].nome)>0) {
                                    // scambia i valori
                                    automobili fTemp = autosalone[j];
                                    autosalone[j] = autosalone[j+1];
                                    autosalone[j+1] = fTemp;
                                }
                            }
                        }    
                        printf ("Vettore ordinato correttamente");
                                
                    break;
                    
                    case 4:    
                    
                        for (int i= 0; i<n; i++) {
                
                               printf("\nAuto %d\n", i+1);
                            printf ("\nMarca: %s\n", autosalone[i].marca);
                            printf ("Modello: %s\n", autosalone[i].modello);
                            printf ("Anno: %d\n", autosalone[i].anno);
                            printf ("Targa: %s\n", autosalone[i].targa);
                            printf ("Prezzo: %d\n", autosalone[i].prezzo);
                            printf ("Anno: %d\n", autosalone[i].anno);
                            for (int j = 0; j<c; j++) {
                                printf ("Nome del %d proprietario: %s\n", j+1, autosalone[i].proprietari[j].nome);
                                printf ("Cognome del %d proprietario: %s\n\n", j+1, autosalone[i].proprietari[j].cognome);
                            }
                        } break;
                    
                    case 5: // Salvo la struttura
                        if (n>0) {                    
                            // Apro il file 
                            fp = fopen ("Autosalone.txt","wb");
                            if (fp!=NULL) { // Se sono riuscito a creare il file
                                fwrite(autosalone,sizeof(automobili),n, fp);                    
                                fclose(fp);
                                printf("Salvataggio avvenuto con successo di %d auto\n", n);
                            } else {
                                printf("Attenzione, errore nella creazione del file");
                            }
                        } else {
                            printf("Spiacente, non c'? nulla da salvare'");
                        }
                    
                    break;
                    
                    case 6: // Carico la struttura
                        printf("\nAttenzione, caricando i dati perderete tutti i dati in memoria, continuare? (Y/n)");
                        char f;
                        fflush(stdin);
                            scanf("%c",&f);
                        if (f=='Y') { // Autorizzazione a caricare!
                            fp = fopen("Autosalone.txt","rb");
                            if (fp!=NULL) { // Se il file esiste
                                while (!feof(fp)) {
                                    int res = fread(&autosalone[n],sizeof(automobili),1, fp);
                                    if (res>0) { // Dopo avere letto l'ultimo elemento ne legge sempre uno vuoto
                                        n++;
                                    }
                                }
                                fclose(fp);
                                printf("Caricamento avvenuto con successo di %d auto\n", n);
                            } else {
                                printf("Mi spiace, sembra che il file Autosalone.txt non esista\n");                        
                            }
                        };
                        break;    
                            
                    case 0:
                        exit (1);
                    break;
        
                }
        } while (scelta <6);
    }
    Ultima modifica di LeleFT; 05-10-2020 a 10:16 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 © 2021 vBulletin Solutions, Inc. All rights reserved.