szukanie stringu w pliku...
Ostatnio zmodyfikowano 2013-07-03 15:26
Matix8741 Temat założony przez niniejszego użytkownika |
szukanie stringu w pliku... » 2013-07-03 14:35:39 Kiedyś, jak robiłem jeszcze podstawowy kurs c++ z tej strony to napisałem taki program #include <fstream> #include <iostream> #include <string> #include<cstdlib>
std::string wprowadz() { std::string wyraz; std::cin.clear(); std::cin.sync(); std::cout << "wprowadz szukany wyraz! :"; std::cin >> wyraz; return wyraz; } int main() { std::string sprawdz = wprowadz(); bool znaleziona; std::ifstream plik; std::string wiersz; plik.open( "c:\\cpp0x.txt" ); if( !plik.good() ) std::cout << "nie uda³o siê wczytywanie pliku"; else { while( std::getline( plik, wiersz ) ) { znaleziona = wiersz.find( sprawdz ); if( znaleziona == std::string::npos ) continue; std::cout << wiersz << std::endl; } plik.close(); } system( "pause" ); return 0; }
Wtedy działał, ale po jakimś czasie przestał o.O ( wiem jest to dziwne, ale nie kłamię). Dzisiaj postanowiłem go naprawić i zauważyłem, że zmienna sprawdzająca czy wyraz jest w pliku była typu bool , więc zmieniłem ją na int i działa, ale teraz moje pytanie: Dlaczego wcześniej działało z bool-em a teraz nie ? Czy to może ja mam urojenia? |
|
Savail |
» 2013-07-03 14:41:29 Zmienna typu bool przyjmuje tylko dwie wartości: 0 dla wartości 0 i 1 dla każdej innej wartości. Z tego co pamiętam std::string::npos ma wartość -1 a więc jeśli przypiszesz ją do zmiennej typu bool to przyjmie ona wartość true. |
|
Matix8741 Temat założony przez niniejszego użytkownika |
» 2013-07-03 14:49:46 Nie, przyjmuje wartość maksymalnej długości obiektu klasy std::string (chyba dobrze napisałem).Wiem, że bool przyjmuje 1 lub 0, ale co się dzieje z tą instrukcją warunkową ? znaleziona = wiersz.find( sprawdz ); if( znaleziona == std::string::npos ) continue;
Dla mnie jest ona nie logiczna i jakaś taka dziwna, ale mimo to się kompiluje i kiedyś robiła to poprawnie, a teraz już nie xD |
|
DejaVu |
» 2013-07-03 15:11:17 Może kiedyś po prostu źle testowałeś program ;) Wartość różna od zera jest traktowana jako prawda. |
|
Matix8741 Temat założony przez niniejszego użytkownika |
» 2013-07-03 15:17:24 No tak, wiem. Ta jednak instrukcja warunkowa nigdy się nie spełni... czyli true jest traktowany jako wartość jeden tak ? Bo std::string::npos na pewno nie jest traktowany jako true |
|
Savail |
» 2013-07-03 15:26:21 w momencie gdy wiersz.find( sprawdz ) osiąga wartość std::string::npos to wartość jaka zostanie przypisana twojej zmiennej bool będzie true. Tak jak napisałeś, ten warunek w instrukcji if rzeczywiście nigdy nie zostanie spełniony (bo 1 lub 0 nigdy nie będzie = -1...) |
|
« 1 » |