Błędne zapisywanie do pliku
Ostatnio zmodyfikowano 2017-10-23 10:45
ksardias Temat założony przez niniejszego użytkownika |
Błędne zapisywanie do pliku » 2017-10-23 09:53:53 cout << "Ile pozycji" << endl; cin >> z; string numerr = int_na_string( numer - 1 ); cout << "Co jest do zrobienia" << endl; for( z; z >= 0; z-- ) { zlecenie = "Zlecenia\\Do zrobienia\\" + numerr + ".txt"; plik.open( zlecenie.c_str(), ios::out | ios::app ); getline( cin, do_zrobienia[ i ] ); plik << do_zrobienia[ i ] << endl; plik.close(); plik.clear(); }
Program działa tak jak chce z jednym małym ale, zapisuje to co wprowadzę i dodatkowo daje jeszcze na początku pustą linie, dlaczego tak jest i jak tego uniknąć? |
|
YooSy |
» 2017-10-23 10:11:53 dodatkowo daje jeszcze na początku pustą linie |
W buforze strumienia pozostaje znak nowej linii. string numerr = int_na_string( numer - 1 ); |
usuwamy z kodu, bo jest zbędne, a dalej zmieniamy kod tak zlecenie = "Zlecenia\\Do zrobienia\\" + to_string( numer + 1 ) + ".txt"; Nie ma potrzeby otwierać i zamykać tego samego pliku w każdym obiegu pętli (maksymalnie niewydajne). Jeszcze ten zapis. getline( cin, do_zrobienia[ i ] ); plik << do_zrobienia[ i ] << endl; |
Po co zapisujesz do tablicy i później do pliku? Jeśli masz zamiar przechowywać dane aktualnie wprowadzane na użytek programu, zrób to w jednym miejscu, a następnie zapisz całą tablicę do pliku w innym miejscu. Zmniejszysz bałagan w kodzie. |
|
ksardias Temat założony przez niniejszego użytkownika |
» 2017-10-23 10:28:36 Oczyściłem bufor i jest ok, ale średnio rozumiem dlaczego pozostawia linijkę tworze, bynajmniej taki mam zamiar, bazę danych EDIT to chodzi o to że jak daje inta to jest '1' a cin zakłada znaki + "/"? |
|
YooSy |
» 2017-10-23 10:45:48 średnio rozumiem dlaczego pozostawia linijkę tworze | getline odczytuje znak nowej linii z bufora i kończy działanie, pozostawiając pusty string, a później zapisujesz do pliku pusty wiersz. Mieszanie >> i getline() to proszenie się o kłopoty, gdy nie zna się zasady ich działania. |
|
« 1 » |