Perchè non funziona?

di il
7 risposte

Perchè non funziona?

Ciao a tutti.
Ho fatto un programma che cerca da un file .txt un nome.
Ora, quando inizializzo la variabile con una stringa con lo stesso nome del nome , che si trova nel file .txt , il programma funziona. Se invece alla stessa variabile le assegno un’altra variabile che contiene il nome di prima, il programma non lo trova. Mi sapete dire il perché?
Metto il codice funzionante:
  string temp,Nome;
  string s1="Francesco ";
  
int main () 
{
 ifstream mioFile("SquadraA.txt");
 while(getline(mioFile, temp))
 {   
	if (temp==s1)// esegue il confronto
	 {
		Nome=temp;cout<<Nome;break;// e qui interrompe il ciclo 
	  }		  
		  else 
		  }
                                          ...............////////////
…e qui quello NON funzionante:
  
  string temp,Nome;
  string s1=Componente;// qui inserisco Francesco dal Main in Componente
  cout<<"Componente "<<Componente;// lo vede in out
  cout<<"\ns1 "<<s1;// vede anche questa var ed è la stessa di Componente
 
 ifstream mioFile("SquadraA.txt");
 while(getline(mioFile, temp))
 {   
	if (temp==s1)// NON esegue il confronto
		{
		     Nome=temp;break;// e NON  interrompe il ciclo 	
		}		  
	                 else// qui continua se non trova il nome
		{
                                       ...............//////////////

7 Risposte

  • Re: Perchè non funziona?

    if (temp==s1)// NON esegue il confronto
    Metti un breakpoint e vedi lo stato dei variabili temp e s1.
    Scommetto che c'è uno spazio in meno
  • Re: Perchè non funziona?

    Ciao Skynet.
    Ho fatto come hai detto tu e infatti la getline assegna a temp il nome Francesco e s1 risulta anch'essa con Francesco, quindi perchè non mi da la condizione vera con l'if?
    Spero che non sia un mio grossolano errore, ma mi sembra di aver fatto tutto bene, anche perchè l'altra versione, funziona.
  • Re: Perchè non funziona?

    Non hai controllato bene gli spazi

    Perché nel primo codice qui

    string s1="Francesco ";

    c'è uno spazio dopo il nome e non è invece così ?

    string s1="Francesco";
  • Re: Perchè non funziona?

    ...Hai ragione
    infatti ho fatto la prova, in quello funzionante, togliendo alla stringa Francesco, lo spazio finale e non fa il confronto. Però ho poi fatto la prova, aggiungendo lo spazio alla fine del nome,nel programma NON funzionante, alla richiesta nel main, ma lo stesso non me la riconosce.
    Mi puoi spiegare l'arcano?
  • Re: Perchè non funziona?

    Magari in quello non funzionante c'è uno spazio o un CR in più ... non posso saperlo dato che non posso eseguire il tuo codice con il tuo file.

    Ma se fai un po' di debugging dovresti vedere esattamente il contenuto delle variabili, byte per byte, per capire il problema.

    Se la if non viene eseguita allora stai sicuro che i dati differiscono per almeno un carattere.
  • Re: Perchè non funziona?

    Grazie...comunque, a prescindere dall' errore, sicuramente presente, mi confermi che è lecito
    assegnare una stringa ad una variabile per poi confrontare quest'ultima con un'altra?
    In poche parole...ho fatto bene?
  • Re: Perchè non funziona?

    Per Skynet e Oregon.

    Ho trovato l'errore...in effetti è come dice Oregon. Nel file .txt, dopo il nome, c'era effettivamente un carattere blank che faceva parte della stringa. Appena l'ho eliminato, è andato tutto bene...che dire...ancora una volta mi avete fatto risparmiare ore e ore ( e anche di mal di testa) a battere la testa sul Pc.
    Sono solito disobbligarmi offrendo qualcosa ma questa volta accontentatevi di una birra...virtuale
Devi accedere o registrarti per scrivere nel forum
7 risposte