PROBLEMA Problema gestione file in c, AIUTATEMI PLS

stefanoX98

Nuovo Utente
1
0
Salve ragazzi, ho un problema e sto quasi impazzendo per risolverlo :ciaociao::
sto scrivendo un programma PRA(pubblico registro automobilistico). Il programma non è ancora terminato ma il primo sottoprogramma stampaInf dovrebbe girare...Il problema sta nel while(!feof(stream)) (che dovrebbe essere utile a terminare il ciclo una volta che la scansione è giunta al termine del file) , quest'ultimo infatti mi causa un errore di tipo Debug Assertion Failed che non riesco proprio a risolvere.
Riporto la finestra dell'errore ed il codice:
errore.JPG
Codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct {
    char targa[8];
    char tipo[10];
    char marca[15];
    int cilindrata;
    int anno_immatricolazione;
    char codice_fiscale[15];
}vett;

typedef struct {
    char cognome[20];
    char nome[20];
    char codice_ficale[15];
    char indirizzo[30];
    char comune[20];
    char provincia[2];
}prop;

void StampaInf(vett*vetture, prop*proprietari, int nvett, int nprop);
//void StampaDa(vett*vetture, prop*proprietari, int nvett, int nprop);

int main(void)
{
        //                                CARICAMENTO VETTURE IN VETTURE.TXT
    vett *vetture;
    int nvett;
    FILE *pf;
    char newVetture[2], request[]="si";

    printf("Hai nuove vetture da inserire? [si/no] : ");                    //Chiedo all'utente se devo aggiungere nuove vetture al file VETTURE.txt
    scanf("%s", &newVetture);
    if (strcmp(newVetture, request) == 0)
    {
        printf("\tINSERIMENTO DATI RELATIVI LE VETTURE");
        printf("\nNumero totale vetture: ");
        scanf("%d", &nvett);
        vetture = (vett*)malloc(nvett*sizeof(vett));
        pf = fopen("VETTURE.txt", "a+");
        if (pf)
        {
            fprintf(pf, "%d\n", nvett);
            for (int i = 0; i < nvett; i++) {
                printf("Inserisci targa: ");
                scanf("%s", &vetture[i].targa);
                fprintf(pf, "TARGA= %s\n", &vetture[i].targa);

                printf("Inserisci tipo: ");
                scanf("%s", &vetture[i].tipo);
                fprintf(pf, "TIPO= %s\n", &vetture[i].tipo);

                printf("Inserisci marca: ");
                scanf("%s", &vetture[i].marca);
                fprintf(pf, "MARCA= %s\n", &vetture[i].marca);

                printf("Inserisci cilindrata: ");
                scanf("%d", &vetture[i].cilindrata);
                fprintf(pf, "CILINDRATA= %d\n", &vetture[i].cilindrata);

                printf("Inserisci l'anno di immatricolazione: ");
                scanf("%d", &vetture[i].anno_immatricolazione);
                fprintf(pf, "ANNO DI IMMATRICOLAZIONE= %d\n", &vetture[i].anno_immatricolazione);

                printf("Inserisci il codice fiscale: ");
                scanf("%s", &vetture[i].codice_fiscale);
                fprintf(pf, "CODICE FISCALE= %s\n\n", &vetture[i].codice_fiscale);
                printf("\n");

            }
            fclose(pf);
        }
        else
            printf("Errore durante l'apertura del file");
    }

    //                                                    CARICAMENTO PROPRIETARI IN PROPRIETARI.TXT
    char newProprietari[2];
    system("cls");
    printf("Ci sono nuovi proprietari da aggiunger? [si/no]: ");                                    //Chiedo all'utente se devo aggiungere nuovi proprietari al file PROPRIETARI.txt
    scanf("%s", &newProprietari);
    prop * proprietari;
    int nprop;
    FILE *pf2;
    if (strcmp(newProprietari, request) == 0)
    {
        printf("\tINSERIMENTO DATI RELATIVI I PROPRIETARI");
        printf("\nNumero totale proprietari: ");
        scanf("%d", &nprop);
        proprietari = (prop*)malloc(nprop*sizeof(prop));
        pf2 = fopen("PROPRIETARI.txt", "a+");
        if (pf2)
        {
            for (int i = 0; i < nprop; i++) {
                printf("Inserisci cognome: ");
                scanf("%s", &proprietari[i].cognome);
                fprintf(pf2, "COGNOME= %s\n", &proprietari[i].cognome);

                printf("Inserisci nome: ");
                scanf("%s", &proprietari[i].nome);
                fprintf(pf2, "NOME= %s\n", &proprietari[i].nome);

                printf("Inserisci codice fiscale: ");
                scanf("%s", &proprietari[i].codice_ficale);
                fprintf(pf2, "CODICE FISCALE= %s\n", &proprietari[i].codice_ficale);

                printf("Inserisci l'indirizzo di abitazione: ");
                scanf("%s", &proprietari[i].indirizzo);
                fprintf(pf2, "INDIRIZZO= %s\n", &proprietari[i].indirizzo);

                printf("Inserisci il comune di residenza: ");
                scanf("%s", &proprietari[i].comune);
                fprintf(pf2, "COMUNE DI RESIDENZA= %s\n", &proprietari[i].comune);

                printf("Inserisci la provincia di residenza: ");
                scanf("%s", &proprietari[i].provincia);
                fprintf(pf2, "PROVINCIA DI RESIDENZA= %s\n\n", &proprietari[i].provincia);
                printf("\n");
            }
            fclose(pf2);
        }
        else
            printf("Errore durante l'apertura del file");
    }

//                                                            MENU
    system("cls");
    int scelta;
    printf("\t\t\tMENU\n");
    printf("[1] ottieni info attraverso il codice fiscale della persona\n[2] ottieni info attraverso la targa della vettura\n");
    printf("\nImmetti la tua scelta: ");
    scanf("%d", &scelta);
    system("cls");
    switch (scelta) {
    case 1:
        StampaInf(vetture,proprietari,nvett,nprop);
    //case 2:
    //    StampaDa(vetture, proprietari, nvett, nprop);
    }
    system("pause");
    return 0;
}

void StampaInf(vett*vetture, prop*proprietari, int nvett, int nprop) {
    char codf[15];
    int contav = 0, i;
    system("cls");
    printf("Inserisci il codice fiscale: ");
    scanf("%s", &codf);


    //                                APERTURA FILE VETTURE IN LETTURA
    int finefile;
    FILE *stream;
    stream = fopen("VETTURE.txt", "rt");
    int N;
    if(stream)
        {        
        while(!feof(stream))                                                                         //<-ERRORE
        {
                fscanf(stream, "TARGA=%s\n", &vetture[i].targa);
                fscanf(stream, "TIPO=%s\n", &vetture[i].tipo);
                fscanf(stream, "MARCA=%s\n", &vetture[i].marca);
                fscanf(stream, "CILINDRATA=%d\n", &vetture[i].cilindrata);
                fscanf(stream, "ANNO DI IMMATRICOLAZIONE=%d\n", &vetture[i].anno_immatricolazione);
                fscanf(stream, "CODICE FISCALE=%s\n\n", &vetture[i].codice_fiscale);

                if (strcmp(vetture[i].codice_fiscale, codf) == 0)
                {
                    contav = contav + 1;
                    printf("\tVettura %d", contav);
                    printf("\nTARGA: %s\nTIPO: %s\nCILINDRATA: %d\n\n", vetture[i].targa, vetture[i].tipo, vetture[i].cilindrata);
                }
        }
            fclose(stream);
        }
    else
    {
        printf("Errore durante l'apertura del file");
    }
            
         if (contav == 0)
        {
            printf("NON ESISTONO VETTURE!\n");
        }
}
 
Ultima modifica da un moderatore:

Ci sono discussioni simili a riguardo, dai un'occhiata!

Entra

oppure Accedi utilizzando

Hot: E3 2021, chi ti è piaciuto di più?

  • Ubisoft

    Voti: 36 22.9%
  • Gearbox

    Voti: 3 1.9%
  • Xbox & Bethesda

    Voti: 100 63.7%
  • Square Enix

    Voti: 13 8.3%
  • Capcom

    Voti: 7 4.5%
  • Nintendo

    Voti: 21 13.4%
  • Altro (Specificare)

    Voti: 15 9.6%

Discussioni Simili