FIGUS Temat założony przez niniejszego użytkownika |
[ Lekcja 32 ] Problem z pracą domową. » 2014-10-07 18:52:18 Witam Proszę Was o pomoc, treść zadania domowego: "Napisz program, który odczyta zawartość pliku, a następnie wypisze na ekranie tylko te wiersze, w których znajduje się wyraz wprowadzony przez użytkownika." Napisałem ten program, 0 błędów w logu, jednak w trakcie pracy programu ten zacina się i "Program przestał działać" Kod programu: #include <iostream> #include <string> #include <fstream>
int wypisz( std::string t[], int wyrazy ) { std::ifstream plik; std::string wiersz; std::cout << "2" << std::endl; plik.open( "tekst.txt" ); if( !plik.good() ) { std::cout << "nie udalo sie wczytac" << std::endl; return 0; } std::cout << "3" << std::endl; while( getline( plik, wiersz ) ); { for( int i = 1; i <= wyrazy; i++ ) { size_t znalezione = wiersz.find( t[ i ] ); std::cout << "petla" << std::endl; if( znalezione == std::string::npos ) { } else { std::cout << wiersz << std::endl; } } } }
int main() { int wyrazy; std::cout << "Ile wyrazow chcesz podac? "; std::cin >> wyrazy; std::string szukane[ wyrazy ]; for( int i = 1; i <= wyrazy; i++ ) { std::cout << "Podaj wyraz: "; std::cin >> szukane[ i ]; } std::cout << "1" << std::endl; wypisz( szukane, wyrazy ); return 0; }
Błąd musi występować w pętli, w której wprowadzamy dane do tablicy, możemy wpisać dane, lecz program nie wychodzi z pętli, ponieważ program nie wypisuje "1", które jest następnym poleceniem. |
|
Jacob99 |
» 2014-10-07 19:00:20 W pętli wychodzisz poza zakres tablicy. |
|
FIGUS Temat założony przez niniejszego użytkownika |
» 2014-10-07 19:02:45 W jaki sposób? |
|
Axero |
» 2014-10-07 19:02:45 Do tego zrób for(int i = 0;i < wyrazy; i++)
Bo jeśli zaczynasz iterować 'i' od 1 to ominiesz pierwszy element tablicy. |
|
FIGUS Temat założony przez niniejszego użytkownika |
» 2014-10-07 19:10:09 Dobra, dzięki za pomoc. Jednak mam jeszcze problem odnośnie tego samego zadania. Poprawiony kod: #include <iostream> #include <string> #include <fstream>
int wypisz( std::string t[], int wyrazy ) { std::ifstream plik; std::string wiersz; std::cout << "2" << std::endl; plik.open( "tekst.txt" ); if( !plik.good() ) { std::cout << "nie udalo sie wczytac" << std::endl; return 0; } std::cout << "3" << std::endl; while( getline( plik, wiersz ) ); { for( int i = 0; i < wyrazy; i++ ) { size_t znalezione = wiersz.find( t[ i ] ); std::cout << "petla" << std::endl; if( znalezione == !std::string::npos ) { std::cout << wiersz << std::endl; } } } }
int main() { int wyrazy; std::cout << "Ile wyrazow chcesz podac? "; std::cin >> wyrazy; std::string szukane[ wyrazy ]; for( int i = 0; i < wyrazy; i++ ) { std::cout << "Podaj wyraz: "; std::cin >> szukane[ i ]; } std::cout << "1" << std::endl; wypisz( szukane, wyrazy ); return 0; }
Problem tkwi gdzieś w pętli znajdującej się w funkcji 'wypisz', mimo wpisywania wyrazów poprawnych, program mi ich nie wyszukuje, co dowodzi to, że wypisuje "pętla" prawidłową liczbę razy, ale nie wypisuje wiersza z pliku tekstowego... |
|
Jacob99 |
» 2014-10-07 19:14:45 if( znalezione == !std::string::npos ) Chyba raczej if( znalezione != std::string::npos ) |
|
Axero |
» 2014-10-07 19:17:04 Anyway lepiej stosuj .eof jako warunek pętli niż wartość błędu zwracaną przez getline. |
|
FIGUS Temat założony przez niniejszego użytkownika |
» 2014-10-07 19:35:56 @Jacob99 poprawiłem w ten sposób, ale nadal występuje ten sam błąd
@Axero Nie uczyłem się jeszcze o .eof
A mogli byście jakoś spojrzeć na to pod względem poprawności w stosunku do treści zadania? |
|
« 1 » 2 |