Errore C0000374 c++

di il
8 risposte

Errore C0000374 c++

Buonpomeriggio a tutti , ho un problema con la lettura di una serie di dati di tipo intero da un file di testo spero davvero mi risolviate il problema perché sono 6 ore ormai che ci sto sbattendo la testa !
In riferimento al codice qui sotto riportato, il dato in questione è n_esami che, rappresenta il numero di esami superati da ciascuno studente ed è dichiarato come variabile globale.
Il dato viene richiamato all'interno di un ciclo while attraverso l'istruzione fin >> n_esami dove fin è il file oggetto della classe ifstream.
n_esami verrà poi inserito nell'oggetto studente s[n_stud] tramite il suo costruttore etc....
Durante la fase di compilazione non ci sono né errori né warning di nessun tipo ma, quando procedo con l'esecuzione il programma esce con il seguente codice di errore Process finished with exit code -1073740940 (0xC0000374).
Con riferimento al file di testo Database.txt ,provando a fare la prova in debugging , il programma funziona al primo ciclo di lettura del file ma, arrivato all'utente Luca Bianco all'esecuzione della linea di codice fin >> n_esami che dovrebbe leggere e salvare 8, cioè il valore che rappresenta il numero di esami superati dallo studente luca bianco, si blocca. Ho provato a dichiarare un vettore di interi in cui a ciascun indice è associato il numero di esami superati per ciascuno studente ,ho usato puntatori ,ho provato con il container <vector> ma niente ,mi da sempre questo problema!

int main() {

    ifstream fin;
    fin.open("Database.txt");
    int n_stud=0;

    Student *s[50];

    int n_esami;
    string nome,cognome;
    int voti[50];
    for (int &i : voti)
        i =0;

    while ((!fin.eof())&&(n_stud<50)) { 

        
        fin >> nome;
        fin.ignore();
        fin >> cognome;
        fin.ignore();
        fin >>  n_esami;
        fin.ignore();

        for (int i=0;i<n_esami;i++){
            fin >> voti[i];
            fin.ignore();
        }
        s[n_stud]=new Student(nome, cognome, n_esami, voti, n_esami > 20);
        n_stud++;
    }
    fin.close();
File Database.txt

Mario Rossi 4
29 30 27 24
Luca Bianco 8
18 18 20 21 23 20 19 21
Marina Stella 3
25 25 25
Arianna Bruno 7
18 30 19 27 20 28 21

8 Risposte

  • Re: Errore C0000374 c++

    Cambia metodo di lettura dei dati da file.

    Il metodo che usi e' TROPPO sensibile a spazi in piu', in meno, errori nel contenuto del file, il fatto che una persona sia identificata da TRE componenti e non due (nome, cognome), un a capo messo male, ecc.

    Leggilo per righe e smonta la riga (una stringa) in sottostringhe.

    VALIDA SEMPRE i dati.
  • Re: Errore C0000374 c++

    migliorabile ha scritto:



    Leggilo per righe e smonta la riga (una stringa) in sottostringhe.
    devo usare la getline ? però come faccio a suddividere la stringa in sottostringhe ? scusa la domanda banale ma ho incominciato da non molto con il c++
  • Re: Errore C0000374 c++

    Il programma è
    - illeggibile
    - disordinato
    - illogico
    - pieno di costanti non "simboliche"
    - con nomi di variabili non significativi
  • Re: Errore C0000374 c++

    nicolap ha scritto:


    Il programma è
    - illeggibile
    - disordinato
    - illogico
    - pieno di costanti non "simboliche"
    - con nomi di variabili non significativi
    Scusa ma con tutto il rispetto come fai a dire che il programma è illogico se il pezzo di codice che ho postato è appunto un pezzo di codice dell'intero programma che, nessuno e quindi nemmeno tu hai avuto occasione di vedere per giungere alle conclusioni alle quali sei giunto?
  • Re: Errore C0000374 c++

    shanks94 ha scritto:


    
            s[n_stud]=new Student(nome, cognome, n_esami, voti, n_esami > 20);
            n_stud++;
    
    Ma perché scrivete tutti così? Vi divertite a riscrivere i nomi delle variabili?
  • Re: Errore C0000374 c++

    shanks94 ha scritto:


    nicolap ha scritto:


    Il programma è
    - illeggibile
    - disordinato
    - illogico
    - pieno di costanti non "simboliche"
    - con nomi di variabili non significativi
    Scusa ma con tutto il rispetto come fai a dire che il programma è illogico se il pezzo di codice che ho postato è appunto un pezzo di codice dell'intero programma che, nessuno e quindi nemmeno tu hai avuto occasione di vedere per giungere alle conclusioni alle quali sei giunto?
    "programma" = pezzo di codice che hai postato.
    È più chiaro così?
    Non devi prendere le critiche al tuo codice come critiche personali, non ha senso.
  • Re: Errore C0000374 c++

    Problema risolto!
    avevo molto ingenuamente inizializzato un vettore di dimensione 50 associato al vettore voti con un ciclo for di 100 cicli --_--'''
    cmq ho riscritto il codice per la lettura del file nel modo seguente in modo da non preoccuparmi di come sia formattato il testo !
    
    string line;
        string nome, cognome;
        int n_esami;
        int val[50];
    
        while ( getline (fin,line) ) 
        {
    
            istringstream is(line);
            is >> nome >> cognome >> n_esami;
            is.clear(); 
    
    
            if (!getline (fin,line))
            {
                cerr << "ERROR: format input file "  << endl;
                exit(EXIT_FAILURE);
            }
    
            is.str(line);
            for(int j = 0; j < n_esami; j++)
            {
                is >> val[j];
            }
            is.clear(); 
    
            s[n_stud]=new Student(nome, cognome,n_esami,val);
            n_stud++;
        }
        fin.close();
    
  • Re: Errore C0000374 c++

    Tutto è bene quel che finisce bene

    Io, comunque, fossi in te metterei anche
        while ( (n_stud < 50) && getline (fin,line) ) 
        
    Poi, volendo, si potrebbe anche fare
    s[n_stud++]
    ma qui è solo questione di gusti, e a quanto pare non piace a nessuno
Devi accedere o registrarti per scrivere nel forum
8 risposte