Rozdział 34 - zadanie domowe 1
Ostatnio zmodyfikowano 2016-09-10 13:50
Speedwaymonia93 Temat założony przez niniejszego użytkownika |
Rozdział 34 - zadanie domowe 1 » 2016-09-08 18:00:50 Czy moglibyście mi sprawdzić ten kod. Plik się kompiluje ale wyskakuje komunikat że sie nie otworzył. Próbowałam wpisać świeżkę wzgldną i bezwględną i nic się nie zmienia. Oto kod: #include <iostream> #include <fstream> #include <string> bool wczytaj_liczbe( std::ifstream & plik, int & liczba ) { plik.clear(); int suma = 0; while( !plik.eof() ) { plik >> liczba; if( plik.fail() ) { std::cout << "Nie udalo sie wczytac liczby" << std::endl; } else std::cout << liczba << " " << std::endl; std::cout << std::endl; suma += liczba; std::cout << "Suma wynosi: " << suma << std::endl; } }
bool wczytaj_znak( std::ifstream & plik, char & znak ) { while( !plik.eof() ) { plik >> znak; if( plik.fail() ) break; } } bool odczytaj( std::string nazwa )
{ std::ifstream plik; plik.open( nazwa.c_str() ); if( !plik.good() ) return false; std::cout << "Nie udalo sie otworzyc pliku" << std::endl; if( plik.good() ) return true; std::cout << "Udalo sie otowrzyc plik!" << std::endl; if( plik.bad() ) { plik.close(); return false; std::cout << "Odczytanie pliku zakonczylo sie niepowodzeniem" << std::endl; } while( !plik.eof() ) { int iliczba; char iznak; if( !wczytaj_liczbe( plik, iliczba ) && plik.bad() ) { return false; } else if( !wczytaj_znak( plik, iznak ) ) { return false; } if( plik.bad() ) { return false; } plik.close(); return true; } }
int main()
{ if( odczytaj( "dane1.txt" ) ); std::cout << "Wczytalo sie!"; }
|
|
carlosmay |
» 2016-09-08 18:39:44 if( !plik.good() ) return false;
std::cout << "Nie udalo sie otworzyc pliku" << std::endl; if( plik.good() ) return true;
std::cout << "Udalo sie otowrzyc plik!" << std::endl;
|
A gdzie klamerki? |
|
Speedwaymonia93 Temat założony przez niniejszego użytkownika |
» 2016-09-09 10:04:22 Poprawiłam i nadal nie dziala. Wypisuje komunikaty "Nie udalo sie wczytac liczby" oraz "Wczytalo sie" natomiast nie wczytuje liczb |
|
karambaHZP |
» 2016-09-09 10:35:34 Plik bez ruszania wskaźnika odczytu można odczytać tylko jeden raz. Jak już dojedzie do końca to każda następna próba odczytu to błąd. Wskaźnik sam nie wróci na początek, musisz sama sie tym zająć. W kursie jest o tym w temacie o poruszaniu się po pliku. |
|
Speedwaymonia93 Temat założony przez niniejszego użytkownika |
» 2016-09-09 11:15:54 Oto kod po poprawkach i waszych sugestiach. Ale nadal wypisuje mi komunikaty "Nie udalo sie wczytac liczby" i "Nie udalo sie wczytac pliku. #include <iostream> #include <fstream> #include <string> bool wczytaj_liczbe( std::ifstream & plik, int & liczba ) { plik.clear(); int suma = 0; plik >> liczba; if( plik.bad() ) { std::cout << "Wystapil blad sprzetowy!" << std::endl; plik.close(); return false; } else if( plik.fail() ) { std::cout << "Nie udalo sie wczytac liczby" << std::endl; return false; } else std::cout << liczba << " " << std::endl; std::cout << std::endl; suma += liczba; std::cout << "Suma wynosi: " << suma << std::endl; return true; }
bool wczytaj_znak( std::ifstream & plik, char & znak ) { plik.clear(); plik >> znak; if( plik.bad() ) { std::cout << "Wystapil blad sprzetowy!" << std::endl; plik.close(); return false; } else if( plik.fail() ) { std::cout << "Nie udalo sie wczytac znaku!" << std::endl; return false; } return true; } bool odczytaj( std::string nazwa ) { std::ifstream plik; plik.seekg( 0 ); plik.open( nazwa.c_str() ); if( !plik.good() ) { return false; } while( !plik.eof() ) { int iliczba; char iznak; if( !wczytaj_liczbe( plik, iliczba ) && plik.bad() ) { return false; } else if( !wczytaj_znak( plik, iznak ) ) { if( plik.fail() ) return false; else break; } plik.close(); return true; } } int main()
{ if( !odczytaj( "D:\\CodeBlocks\\ZADANIA DOMOWE\\POZIOM 4\\lekcja 34\\dane1.txt" ) ); std::cout << "Nie udalo sie wczytac pliku!"; return 0; }
|
|
karambaHZP |
» 2016-09-09 12:02:56 Raczej nie otwiera ci się plik. Poza tym teraz seekg nie jest już potrzebny. W poprzednim był, bo wszędzie było czytanie do końca pliku. Tak przy okazji - seekg jest w złym miejscu. |
|
Speedwaymonia93 Temat założony przez niniejszego użytkownika |
» 2016-09-10 10:01:44 Wiem że mi się nie otwiera ale nie wiem czemu. Proszę o jakieś wskazówki jakbym mogła ten problem rozwiązać bo już siedzę nad tym drugi dzień i nie mogę nic wykombinować. |
|
carlosmay |
» 2016-09-10 13:50:05 Pozbądź się spacji ze ścieżki (czasem to pomaga) lub masz źle wpisaną ścieżkę. |
|
« 1 » |