c++ getline/pliki
Ostatnio zmodyfikowano 2016-12-04 20:27
dakruzz Temat założony przez niniejszego użytkownika |
c++ getline/pliki » 2016-12-04 14:04:44 Mam problem z opcją getline w stringu #include <iostream> #include <fstream> #include <string>
using namespace std;
int main() { ifstream wejscie; ofstream wyjscie; string z; wejscie.open( "dane.txt" ); if( !wejscie ) { cout << "niepoprawny plik"; return 0; } wyjscie.open( "wyjscie.txt" ); while( !wejscie.eof() ) { cout << getline( wejscie, z ); } return 0; }
Nie wiem czemu, ale wyświetla mi sam adres, a nie zdanie Wyswietla: 0x6afe640x6afe640x6afe640x6afe64 Dane pliku(dane.txt): ala ma kota kot ma ale ala nie ma kota kot nie ma ali Plan jest taki, żeby każdy wiersz zaczynający się na "a" wrzucił do nowego pliku(wyjscia), ale nie mogę ogarnąć tego getline i przez to całe zadanie mi pada. |
|
karambaHZP |
» 2016-12-04 14:24:28 |
|
dakruzz Temat założony przez niniejszego użytkownika |
» 2016-12-04 14:36:23 jestem dość świeży, więc o ile masz wolny czas to proszę o wytłumaczenie dlaczego to jest ryzykowane. Mam zastąpić to if, albo for? Dzięki za link, teraz mam kolejny problem(zapewne typowy dla świeżaka): while( !wejscie.eof() ) { if( z == 'a' ) getline( wejscie, z ); cout << z; }
if(z=='a') - tutaj jest błąd Robiąc to inaczej też wyskakuje mi błąd while( !wejscie.eof() ) { wejscie >> z; if( z == z1 ) { wejscie.getline( z, 255 ); cout << z; } }
i też przy if'ie |
|
carlosmay |
» 2016-12-04 17:58:28 Pewnie chodzi o użycie ostatniej linii z pliku dwukrotnie. Co do błędów, wklejaj ich treść. Łatwiej znaleźć ów błąd i szybciej nauczysz je czytać. |
|
dakruzz Temat założony przez niniejszego użytkownika |
» 2016-12-04 19:05:26 Dzięki za wszelkie rade :) Przy takim kodzie: char dane[ 200 ]; char znak_zamiany; cin >> znak_zamiany; while( !wejscie.eof() ) { wejscie >> dane; if( dane == znak_zamiany ) { wejscie.getline( z, 200 ); cout << dane; } }
Wyskakuje błąd: ISO C++ forbids comparison between pointer and integer [-fpermissive]| Natomiast przy takim: string dane[ 200 ]; string znak_zamiany; cin >> znak_zamiany; while( !wejscie.eof() ) { wejscie >> dane; if( dane == znak_zamiany ) { getline( wejscie.dane ); cout << dane; } }
Wyskakuje: error: no match for 'operator>>' (operand types are 'std::ifstream {aka std::basic_ifstream<char>}' and 'std::string [200] {aka std::basic_string<char> [200]}')| |
|
carlosmay |
» 2016-12-04 19:58:42 no match for 'operator>>' (operand types are 'std::ifstream {aka std::basic_ifstream<char>}' and 'std::string [200] {aka std::basic_string<char> [200]}') |
Wygląda na brak dołączonego nagłówka #include <string> Metoda std::getline(); zwraca taką samą wartość jaką zwraca strumień użyty w pierwszym argumencie, więc możesz użyć jej bezpośrednio w warunku. Koniec pliku == nieudane wczytywanie == warunek pętli niespełniony. #include <string> #include <fstream> #include <iostream> #include <cctype>
int main() { std::ifstream fin( "test.txt" ); std::ofstream fout( "test_out.txt" ); if( fin && fout ) { std::string tmp { }; while( std::getline( fin, tmp ) ) { if( std::tolower( tmp[ 0 ] ) == 'a' ) { fout << tmp.data() << '\n'; } } } else { std::cerr << "lipa\n"; } } |
|
dakruzz Temat założony przez niniejszego użytkownika |
» 2016-12-04 20:27:49 Wielkie Dzięki! pozwoliłem sobie troche przerobić go na bardziej czytelny dla mnie
Problem rozwiązany :) |
|
« 1 » |