Riant Temat założony przez niniejszego użytkownika |
Problem z while » 2009-04-19 19:38:37 Witam. Mam taki oto kod: while( !plik1.eof() ) { plik1 >> slowo1; if( szukany1 == slowo1 ) { system( "cls" ); plik1 >> slowo1; cout << endl << PL( "Słowo: " ) << szukany1 << endl << PL( "Przetłumaczone: " ) << slowo1 << endl; } else { cout << "Nie ma tego słowa w bazie."; } }
I dlaczego gdy uruchomię program i warunek if(szukany1==slowo1) jest spełniony, to wyświetla się: Słowo: JakieśSłowo Przetłumaczone: JakieśSłowo2 Nie ma tego słowa w bazie. Dlaczego wyświetla się else skoro if jest spełniony? Co źle napisałem? Oczywiście kawałek "Nie ma tego słowa w bazie." wyświetla się tyle razy, ile jest wierszy do sprawdzenia w bazie, ale to już inny problem. |
|
pekfos |
» 2009-04-19 19:45:12 while( !plik1.eof() ) { plik1 >> slowo1; if( szukany1 == slowo1 ) { system( "cls" ); plik1 >> slowo1; cout << endl << PL( "Słowo: " ) << szukany1 << endl << PL( "Przetłumaczone: " ) << slowo1 << endl; break; } else { cout << "Nie ma tego słowa w bazie."; } } to powinno pomóc //edit: break sprawia że pętla sie urywa czyli przestajesz dalej pobierać dane z pliku. przecież następne słowa w pliku nie będą takie jak szukany1 przez co w następnych przebiegach spełnia sie warunek else |
|
DejaVu |
Rozwiązanie » 2009-04-19 19:46:59 bool znaleziono = false; while( !plik1.eof() ) { plik1 >> slowo1; if( szukany1 == slowo1 ) { znaleziono = true; break; } }
if( znaleziono == true ) { cout << endl << PL( "Słowo: " ) << szukany1 << endl << PL( "Przetłumaczone: " ) << slowo1 << endl; } else { cout << "Nie ma tego słowa w bazie."; }
|
|
Riant Temat założony przez niniejszego użytkownika |
» 2009-04-19 19:57:13 Dzięki! Działa. :D Ale żeby nie zakładać nowego tematu... Jeśli warunek if nie jest spełniony, to else jest wyświetlany tyle razy ile jest wierszy w bazie. Jak mogę to ograniczyć, żeby komunikat że słowa nie ma wyświetlał się tylko raz? Chodzi mi konkretnie w jaki sposób można się dowiedzieć, czy dany tekst został już wyświetlony? Tak schematycznie: if( cout << "Nie ma słowa w bazie"; != 1 ) { cout << "Nie ma słowa w bazie"; }
O coś takiego mi chodzi. Jest jakiś sposób by sprawdzić czy tekst "Nie ma słowa w bazie" został już wyświetlony? |
|
driver1995 |
» 2009-04-19 20:05:40 Np. coś takiego możesz zrobić: bool costam = true;
if( costam == true ) { cout << "Nie ma slowa w bazie"; costam = false; } Jeśli dobrze zrozumiałem, o co Ci chodzi to powinno ujść... |
|
Riant Temat założony przez niniejszego użytkownika |
» 2009-04-19 20:16:41 Piotrze Szawdyński po użyciu Twojego sposobu w switch wyrzuca mi błędy: int main() { system( "color F0" ); string szukany1, slowo1; string szukany2, slowo2; bool znaleziono = false; do { cout << PL( "Coś tam"; ) int wybor; cin >> wybor; switch( wybor ) { case 1: { system( "cls" ); coutPL( "Coś tam" ); break; } case 2: { system( "cls" ); cout << PL( "Coś tam." ); break; } case 3: { ifstream plik1( "slownik1.txt" ); while( !plik1.eof() ) { plik1 >> slowo1; if( szukany1 == slowo1 ) { znaleziono = true; break; } } if( znaleziono == true ) { plik1 >> slowo1; cout << endl << PL( "Słowo: " ) << szukany1 << endl << PL( "Przetłumaczone: " ) << slowo1 << endl; } else { cout << PL( "Nie ma tego słowa w bazie." ); } } break; } case 4: { system( "cls" ); ifstream plik2( "slownik2.txt" ); cout << "Wpisz szukany wyraz: "; cin >> szukany2; while( !plik2.eof() ) { plik2 >> slowo2; if( szukany2 == slowo2 ) { system( "cls" ); plik2 >> slowo2; cout << endl << PL( "Słowo: " ) << szukany2 << endl << PL( "Przetłumaczone: " ) << slowo2 << endl; } else { cout << PL( "Nie ma słowa w bazie." ); } break; } default: exit( 0 ); } } while( 1 ); getch(); return 0; }
C:\Documents and Settings\Administrator\Pulpit\BezNazwy1.cpp In function `int main()': 163 C:\Documents and Settings\Administrator\Pulpit\BezNazwy1.cpp case label `4' not within a switch statement 181 C:\Documents and Settings\Administrator\Pulpit\BezNazwy1.cpp case label not within a switch statement 184 C:\Documents and Settings\Administrator\Pulpit\BezNazwy1.cpp expected `while' before '}' token 184 C:\Documents and Settings\Administrator\Pulpit\BezNazwy1.cpp expected `(' before '}' token 184 C:\Documents and Settings\Administrator\Pulpit\BezNazwy1.cpp expected primary-expression before '}' token 184 C:\Documents and Settings\Administrator\Pulpit\BezNazwy1.cpp expected `)' before '}' token 184 C:\Documents and Settings\Administrator\Pulpit\BezNazwy1.cpp expected `;' before '}' token 184 C:\Documents and Settings\Administrator\Pulpit\BezNazwy1.cpp At global scope: 184 C:\Documents and Settings\Administrator\Pulpit\BezNazwy1.cpp expected unqualified-id before "while" 184 C:\Documents and Settings\Administrator\Pulpit\BezNazwy1.cpp expected `,' or `;' before "while" 185 C:\Documents and Settings\Administrator\Pulpit\BezNazwy1.cpp expected constructor, destructor, or type conversion before ';' token 186 C:\Documents and Settings\Administrator\Pulpit\BezNazwy1.cpp expected unqualified-id before "return" 186 C:\Documents and Settings\Administrator\Pulpit\BezNazwy1.cpp expected `,' or `;' before "return" 187 C:\Documents and Settings\Administrator\Pulpit\BezNazwy1.cpp expected declaration before '}' token
driver1995 jak rozwiążę ten problem, sprawdzę Twój pomysł. Z góry dzięki. ;-) |
|
setless |
» 2009-04-19 21:31:43 A od kiedy to case'y wyrzuca się przed switch'a ? Poza tym masa innych błędów składniowych. O ile sposób Tobie przedstawiony ( już dwukrotnie ) jest dobry, o tyle gorzej z Twoją, jego implementacją. Przeczytaj i przeanalizuj pierwsze 2 udzielone odpowiedzi. |
|
Riant Temat założony przez niniejszego użytkownika |
» 2009-04-19 21:59:51 setless A gdzie ja case'a wrzuciłem przed switch'a? A po drugie, gdy zamiast: bool znaleziono = false; while( !plik1.eof() ) { plik1 >> slowo1; if( szukany1 == slowo1 ) { znaleziono = true; break; } }
if( znaleziono == true ) { cout << endl << PL( "Słowo: " ) << szukany1 << endl << PL( "Przetłumaczone: " ) << slowo1 << endl; } else { cout << "Nie ma tego słowa w bazie."; }
Było: while( !plik1.eof() ) { plik1 >> slowo1; if( szukany1 == slowo1 ) { system( "cls" ); plik1 >> slowo1; cout << endl << PL( "Słowo: " ) << szukany1 << endl << PL( "Przetłumaczone: " ) << slowo1 << endl; } break; else { cout << "Nie ma tego słowa w bazie."; } }
To program dobrze się kompilował. Więc nie pisz że "masa" błędów składniowych. Takie to ja widzę. Możliwe że coś namieszałem w związku z nowym kawałkiem kodu. Przeanalizuję jak pisałeś. Ale dalej nie wiem gdzie jest błąd i co go powoduje. |
|
« 1 » 2 |