Newsgroup: it.comp.lang.c++
Titolo: Problema piuttosto strano...

Salve a tutti, potreste dirmi dov'č l'errore? Ho un problema con il 
seguente sorgente:
bool vedisece (string s, string stringa) {
        for (int i = 0; i < stringa.size(); i++) {
                if (s[0] == stringa[i])
                        return true;
                else
                        return false;
        };
};
string s = "c", st = "abcde";
int main () {
        std::cout << vedisece (s, st) << std::endl;
        return 0;
}
Perché mi ritorna 0 (false) ?
Se st la eguaglio a "cdasa" (con "c" all'inizio della stringa) mi ritorna 
1!!
La cosa ancora piů strana č che se invece di scrivere una funzione, ricopio 
ed eseguo tutto nel main, mi da 1 (true)!!!
Ho provato a passare i parametri per riferimento... ma niente!
Spero mi possiate aiutare
Grazie
Luigi

 Perché mi ritorna 0 (false) ?
Hai mai pensato di usare un debugger?
Se avessi fatto un trace nel tuo programma te ne saresti accorto subito.
Quando entri nel for tu esegui sempre e comunque un solo ciclo. Se il primo
carattere di stringa e' uguale al primo carattere di s ritorni true, altrimenti
ritorni false. Fine del discorso! I caratteri successivi non li testi mai. La
graffa finale del for (e idem per i++) sono "unreachable code".
--
Andrea Ferro
---------
Brainbench C++ Master. Scored higher than 97% of previous takers
Scores: Overall 4.46, Conceptual 5.0, Problem-Solving 5.0
More info 
http://www.brainbench.com/transcript.jsp?pid=2522556

 code".
Perché? C'è la condizione i < stringa.size() che dovrebbe impedirlo....
allora perché se trasferisco il codice nel main, tutto funziona?
Come posso fare allora?
Grazie 
--
Luigi

 Ne esiste qualcuno per g++?
gdb, xxgdb, ddd, kdebug, etc, etc...

 gdb, xxgdb, ddd, kdebug, etc, etc...
Per caso includo anche il compilatore oppure usano il g++ per testare il 
programma?
Grazie
 
--
Luigi

 gdb, xxgdb, ddd, kdebug, etc, etc...
Quali di questi ha un IDE?
ciao
--
Luigi

};
Vedo un else di troppo che impedisce che il tuo ciclo vada avanti,
limitandosi cosi' a confrontare il primo carattere. Prova cosi'.
//il BCB segna warning se confronti una variabile signed con una
unsigned.
for(unsigned int i=0;i<stringa.size();i++)    
    if(s[0]==stringa[i])return true;
return false;
Il Ghenio
WINWORD.EXE - ERRORE DI APPLICAZIONE
l'istruzione a "0x3017ff27"ha fatto riferimento alla
memoria a "0x02a3143c".La memoria non poteva essere 'read'.

 return false;
Non funziona
ciao
--
Luigi

 Quali di questi ha un IDE?
tutti tranne il primo
per usare un debug devi compilare senza -s e con -g

Luca ha scritto:

quindi g++ myfile-cpp -og myfile.exe ???
Come tolgo -s ?
--
Luigi

> quindi g++ myfile-cpp -og myfile.exe ???
Sorry,
quindi g++ myfile.cpp -og myfile.exe ???

 quindi g++ myfile.cpp -og myfile.exe ???
no, -g -o myfile
 

 wrote in message
news:yURB6.9455$s93.6...@news.infostrada.it...

Cosa centra! Quella condizione la testi quando entri nel for, ma il codice che
si trova all'interno del ciclo esegue sempre e comunque un return. Pertanto non
arrivi mai al termine del primo ciclo.
Prova, anche senza un debugger, ad eseguire passo passo a mano il codice che hai
scritto.


 wrote in message
news:LzYB6.13057$s93.7...@news.infostrada.it...

Si che funziona. Evidentemente non hai copiato bene.


 Si che funziona. Evidentemente non hai copiato bene.
Già. Non avevo tolgo le graffe del for... ma perché davano fastidio?
Con le graffe al 1° false usciva e non se parlava più?
Grazie 
--
Luigi

Non funziona
Ho compilato il tuo listato con la modifica che ti ho suggerito e mi
restituisce 1(true, visto che la funzione restituisce un bool)che a
quanto pare sarebbe quello che volevi ottenere. A te non funziona?
Ottieni un errore di compilazione per caso? Se é cosi' l'errore sta
sicuramente da qualche altra parte, non certo nel punto che ti ho
consigliato di modificare, che é peraltro di una banalità
sconcertante.
Buona pasqua!!!!


 wrote in message
news:q1cC6.16457$s93.9...@news.infostrada.it...

Esatto.
