Damfled Temat założony przez niniejszego użytkownika |
Poziom 4 lekcja 33 wczytywanie danych z pliku operatorem >> » 2017-01-28 17:13:20 Dlaczego nie wczytuje ostatniego działania ( tutaj z przykładowego programu z tej lekcji ) oraz ostatniej liczby z zadania domowego? Nie ważne czy napiszę 1 2 3 4 5 6 7 8 9 10 czy bez 10 ostatniej liczby mi nie wypisuje i nie sumuje lub może pomija w sumie wyświetliło puste zdanie przed zakończeniem w przykładzie. |
|
mateczek |
» 2017-01-28 17:20:31 wklej swój kod na forum albo poszukaj wróżbity:P |
|
Damfled Temat założony przez niniejszego użytkownika |
» 2017-01-28 17:31:54 No cóż przykładowy program jest widoczny cały czas. :) Niżej mój kod. W pliku dane.txt są wpisane liczby 1 2 3 4 5 6 7 8 9 10 #include <iostream> #include <fstream> #include <string>
void wypiszLiczbe( int liczba ) { std::cout << liczba << ", "; }
bool otworzPlik( std::string nazwaPliku ) { std::ifstream plik; plik.open( nazwaPliku.c_str() ); if( !plik.good() ) return false; int liczba; int suma = 0; while( true ) { plik >> liczba; if( plik.good() ) { wypiszLiczbe( liczba ); suma += liczba; } else { std::cout << std::endl; std::cout << suma; break; } } return true; } int main() { if( !otworzPlik( "dane.txt" ) ) std::cout << "Nie udalo sie otworzyc pliku!" << std::endl; return 0; }
|
|
mateczek |
» 2017-01-28 18:26:59 #include <iostream> #include <fstream> #include <string>
void wypiszLiczbe( int liczba ) { std::cout << liczba << ", "; }
bool otworzPlik( std::string nazwaPliku ) { std::ifstream plik( nazwaPliku ); if( !plik ) return false; int liczba; int suma = 0; while( plik >> liczba ) { wypiszLiczbe( liczba ); suma += liczba; } std::cout << std::endl; std::cout << suma; return true; } int main() { if( !otworzPlik( "dane.txt" ) ) std::cout << "Nie udalo sie otworzyc pliku!" << std::endl; return 0; } możesz też zmienić warunek testując flagę błędu pliku plik >> liczba; if( !plik.fail() ) { }
plik >> liczba; if( plik ) { }
|
|
Damfled Temat założony przez niniejszego użytkownika |
» 2017-02-02 15:10:40 Poziom 4, lekcja 34 Wczytywanie zawartości pliku, a kontrola błędów. Robiąc drugie zadanie napotkałem błąd. :) Po naciśnięciu ctrl + F9 odpala się z folderu codeblocks plik o nazwie ios_base.h no i wyświetla tam błąd. Kod który póki co napisałem: #include <iostream> #include <fstream> #include <string>
bool czyNapotkanoZnakNowegoWiersza( std::ifstream & plik ) { char cZnak; for(;; ) { plik.clear(); cZnak = plik.peek(); if( plik.fail() || plik.bad() ) return false; if( !isspace( cZnak ) ) return false; plik.get( cZnak ); if( plik.fail() || plik.bad() ) return false; if( cZnak == '\n' ) return true; } }
bool wczytajLiczbe( std::ifstream plik, int & suma ) { int liczba; plik.clear(); plik >> liczba; if( plik.bad() ) { plik.close(); return false; } else if( plik.fail() ) { return false; } else std::cout << liczba << ", "; suma += liczba; return true; } bool otworzPlik( std::string nazwaPliku ) { std::ifstream plik; plik.open( nazwaPliku.c_str() ); if( !plik.good() ) std::cout << "Nie udalo sie otworzyc pliku!" << std::endl; int suma = 0; while( !plik.eof() ) { wczytajLiczbe( plik, suma ); if( czyNapotkanoZnakNowegoWiersza( plik ) == true ); { std::cout << suma << std::endl; } } plik.close(); return true; }
int main() { otworzPlik( "dane.txt" ); return 0; }
|
|
michal11 |
» 2017-02-02 16:39:17 Skoro jakiś błąd ci się wyświetla to wypadałoby go tu wkleić żebyśmy wiedzieli o co chodzi. |
|
Damfled Temat założony przez niniejszego użytkownika |
» 2017-02-03 10:07:30 Build log: mingw32-g++.exe -Wall -c F:\Dane\C++\-.cpp -o F:\Dane\C++\-.o In file included from h:\programy\codeblocks\mingw\lib\gcc\mingw32\4.8.1\include\c++\ios:42:0, from h:\programy\codeblocks\mingw\lib\gcc\mingw32\4.8.1\include\c++\ostream:38, from h:\programy\codeblocks\mingw\lib\gcc\mingw32\4.8.1\include\c++\iostream:39, from F:\Dane\C++\-.cpp:1: h:\programy\codeblocks\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\ios_base.h: In copy constructor 'std::basic_ios<char>::basic_ios(const std::basic_ios<char>&)': h:\programy\codeblocks\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\ios_base.h:786:5: error: 'std::ios_base::ios_base(const std::ios_base&)' is private ios_base(const ios_base&); ^ In file included from h:\programy\codeblocks\mingw\lib\gcc\mingw32\4.8.1\include\c++\ios:44:0, from h:\programy\codeblocks\mingw\lib\gcc\mingw32\4.8.1\include\c++\ostream:38, from h:\programy\codeblocks\mingw\lib\gcc\mingw32\4.8.1\include\c++\iostream:39, from F:\Dane\C++\-.cpp:1: h:\programy\codeblocks\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\basic_ios.h:66:11: error: within this context class basic_ios : public ios_base ^ In file included from F:\Dane\C++\-.cpp:2:0: h:\programy\codeblocks\mingw\lib\gcc\mingw32\4.8.1\include\c++\fstream: In copy constructor 'std::basic_ifstream<char>::basic_ifstream(const std::basic_ifstream<char>&)': h:\programy\codeblocks\mingw\lib\gcc\mingw32\4.8.1\include\c++\fstream:427:11: note: synthesized method 'std::basic_ios<char>::basic_ios(const std::basic_ios<char>&)' first required here class basic_ifstream : public basic_istream<_CharT, _Traits> ^ In file included from h:\programy\codeblocks\mingw\lib\gcc\mingw32\4.8.1\include\c++\ios:43:0, from h:\programy\codeblocks\mingw\lib\gcc\mingw32\4.8.1\include\c++\ostream:38, from h:\programy\codeblocks\mingw\lib\gcc\mingw32\4.8.1\include\c++\iostream:39, from F:\Dane\C++\-.cpp:1: h:\programy\codeblocks\mingw\lib\gcc\mingw32\4.8.1\include\c++\streambuf: In copy constructor 'std::basic_filebuf<char>::basic_filebuf(const std::basic_filebuf<char>&)': h:\programy\codeblocks\mingw\lib\gcc\mingw32\4.8.1\include\c++\streambuf:802:7: error: 'std::basic_streambuf<_CharT, _Traits>::basic_streambuf(const std::basic_streambuf<_CharT, _Traits>&) [with _CharT = char; _Traits = std::char_traits<char>]' is private basic_streambuf(const basic_streambuf& __sb) ^ In file included from F:\Dane\C++\-.cpp:2:0: h:\programy\codeblocks\mingw\lib\gcc\mingw32\4.8.1\include\c++\fstream:72:11: error: within this context class basic_filebuf : public basic_streambuf<_CharT, _Traits> ^ h:\programy\codeblocks\mingw\lib\gcc\mingw32\4.8.1\include\c++\fstream: In copy constructor 'std::basic_ifstream<char>::basic_ifstream(const std::basic_ifstream<char>&)': h:\programy\codeblocks\mingw\lib\gcc\mingw32\4.8.1\include\c++\fstream:427:11: note: synthesized method 'std::basic_filebuf<char>::basic_filebuf(const std::basic_filebuf<char>&)' first required here class basic_ifstream : public basic_istream<_CharT, _Traits> ^ F:\Dane\C++\-.cpp: In function 'bool otworzPlik(std::string)': F:\Dane\C++\-.cpp:58:35: note: synthesized method 'std::basic_ifstream<char>::basic_ifstream(const std::basic_ifstream<char>&)' first required here wczytajLiczbe( plik, suma ); ^ F:\Dane\C++\-.cpp:28:6: error: initializing argument 1 of 'bool wczytajLiczbe(std::ifstream, int&)' bool wczytajLiczbe( std::ifstream plik, int & suma ) ^ Process terminated with status 1 (0 minute(s), 0 second(s)) 5 error(s), 0 warning(s) (0 minute(s), 0 second(s))
Dziwnie wygląda po dodaniu, mam nadzieję że o to chodzi. :) |
|
carlosmay |
» 2017-02-03 10:56:35 Obiekt strumienia plikowego daj przez referencje, ponieważ ma usunięty konstruktor kopiujący, albo jest on prywatny (na jedno wychodzi). Wypadałoby coś zwrócić, na wypadek błędu otwarcia pliku. |
|
« 1 » 2 |