Problemi con C++ lato linux

di il
20 risposte

Problemi con C++ lato linux

Salve ragazzi,
sono giorni che non riesco a venire a capo di un problema che mi sta lasciando insonne.
devo consegnare un progetto per un esame universitario, ho fatto la stesura del progetto su visual studio e tutto funzionava egregiamente, all'ultimo minuto il prof ci ha detto che il programma deve girare su linux e fin qui nessun problema fino a quando, compilato il programma vedo qualcosa che non va: in pratica io ho un vector che viene letto da una funzione, ma quando esso entra in una nuova funzione esso mi risulta un vettore pieno ma di elementi nulli: come si può vedere dalla foto vi sono i 2 codici fiscali in un primo caso e successivamente nel check esso risulta nullo infatti mi stampa due volte "sto nel check" senza però stampare il contenuto del vettore

20 Risposte

  • Re: Problemi con C++ lato linux

    Il professore avrebbe dovuto avvisarvi che il codice va scritto multipiattaforma, nei limiti del possibile.

    Non si vede niente. Comunque posta la parte di codice incriminato usando il pulsante < />
  • Re: Problemi con C++ lato linux

    Ciao, alla fine smanettando un po sono riuscito a trovare l'errore, ti ringrazio per la risposta repentina a presto!
  • Re: Problemi con C++ lato linux

    No ragazzi il problema persiste
    allego il codice:
    bool check_CF(vector<string>&CF,string CF1) {
    
    
    
        bool trovato ;
    
    		int trova=0;
    
    
    
        for (int i = 0; i < CF.size(); i++){
    
            if (CF1 == CF[i]) {
    	trovato=true;
    
                trova=1;
    
                
    
                }
    	}
    
            
    
       cout<<trova<<endl; 
    
        if(trova==0){
    
            trovato=false;
    
        }
    	
    	return trovato;
    
    }   

    non mi riesce a comparare le due stringhe non mi entra proprio nel if, su visual studio funzione tutto
  • Re: Problemi con C++ lato linux

    Sicuro che nel vector ci sia qualcosa che possa soddisfare la condizione?
    Come lo riempi il vector?
  • Re: Problemi con C++ lato linux

    Il vector viene riempito con una serie di codici fiscali prelevati da file di testo, stampadolo prima del il mi risulta che è riempito e che in CF1 c'è il codice fiscale che inserisco da testiera, però anche se coincidono non entra nella condizione, infatti ribadisco in visual tutto funziona correttamente.
  • Re: Problemi con C++ lato linux

    Paziente inserire_pazienti(vector<string>&CF) {
    
        Paziente p1;
    
        		
    
            string nome,cognome,CF1;
    
            int eta;
    
            cout << "Dimmi un nome: ";
    
            cin >> nome;
    
            cout << "Dimmi un cognome: ";
    
            cin >> cognome;
    
            cout << "Dimmi Anno Nascita: ";
    
            cin >> eta;
    
            cout << "Dimmi CF: ";
    
            cin >> CF1;
    
    	
    
    			
    
            if((check_CF(CF,  CF1)) ) {
    
                    cout << "NOME REGISTRATO CON SUCCESSO" << endl;
    
                    p1 = Paziente(nome, cognome, CF1, eta);
    
    				return p1;
    
    
    
               }
    
    		
    
            else 
    
            {
    
    
    
                cout << "INSERIMENTO FALLITO" << endl;
    
                
    
    
    
            }
    
           
    
            
    
        
    
            
    
    }
    qui è dove la funzione viene richiamata
  • Re: Problemi con C++ lato linux

    Potrebbe non cambiare niente, ma io proverei anche con
    
    if (CF1.compare(CF[i]) == 0) etc..
    
    del resto se funziona con VS deve funzionare anche con GCC (previ Bug del compilatore).
  • Re: Problemi con C++ lato linux

    Per escludere bug legati alla lettura del file, prova ad inizializzare tu il vettore e vedi se funziona.
  • Re: Problemi con C++ lato linux

    Posta tutta la catena di chiamate.

    Poi comunque cambia la prima funzione che non si può vedere
    
     for(...)
            if (CF1 == CF[i]) {
                cout << "trovato\n";
    	    return true;
    	    }
    return false;
    
  • Re: Problemi con C++ lato linux

    Consiglio spassionato: acquisisci tutti (ma proprio tutti) gli input con getline per evitare problemi di buffer ed convertire eventuali interi con le apposite funzioni.
    Non saresti il primo ad avere casini con operator >> tra i vari sistemi e/o compilatori.
  • Re: Problemi con C++ lato linux

    Ho provato è se inserisco io i valori nell' vector il tutto funziona
    vector<string> readfile(string filename) {
    
        fstream my_file;
    
        vector<string> CFs;
    
        my_file.open(filename, ios::in);
    
        if (!my_file) {
    
            cout << "FILE NON TROVATO ERRORE"<<endl;
    
    		
    
        }
    
        else {
    
            string tp;
    
            while (getline(my_file, tp)) { //read data from file object and put it into string.
    
                //cout << tp << "\n"; //print the data of the string
    
                CFs.push_back(tp);
    
            }
    
        }
    
        my_file.close();
    
    
    
    
    
        return CFs;
    
    }
    
    
    il file lo leggo in questo modo
    come potrei cambiare la prima funzione?
    scusate l'ignoranza!
  • Re: Problemi con C++ lato linux

    Come come si fa, te l'ho scritto. Perché trova e trovato?

    Comunque prova a dichiarare come globale vector<string> CFs; senza stare a impazzire. Eventualmente lo pulisci con clear() se lo devi reinizializzare
  • Re: Problemi con C++ lato linux

    do{
    
                                    string nomefile;
    
                                    cout << " Ora Inserisci il nome del file " << endl;
    
                                    cin >> nomefile;
    
                                    string estenzione = ".txt";
    
                                     CF = readfile(nomefile + estenzione);
    
    		}while(CF.size()==0);
    
    
    
    								
    
                                    do {
    
                                        cout << "*******************************" << endl;
    
                                        cout << "DIGITA R PER REGISTRARE PAZIENTE" << endl;
    
                                        cout << " DIGITA C PER CERCARE PAZIENTE" << endl;
    
                                        cout << "DIGITA D PER CANCELLARE UN PAZIENTE APPENA VACCINATO" << endl;
    
                                        cout << "DIGITA S STAMPARE CF PAZIENTI CHE DEVONO FARE IL VACCINO" << endl;
    
                                        cout << "DIGITA E PER TERMINARE" << endl;
    
                                        cout << "*******************************" << endl;
    
                                        cout << "INSERIRE OPERAZIONE" << endl;
    
                                        cin >> sceltap;
    
                                        switch (tolower(sceltap))
    
                                        {
    
                                        case 'r': {
    
                                            P.push_back(inserire_pazienti(CF));
    
    											
    					(...)
    												
    
    
    ovviamente poi continua ma il problema sostanziale è quello della comparazione
  • Re: Problemi con C++ lato linux

    Ciao scusa weiestrass come potrei renderlo globale?
    scusami davvero!
Devi accedere o registrarti per scrivere nel forum
20 risposte