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:
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:

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: