• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

getline i zapis do pliku

Object Storage Arubacloud
0 głosów
730 wizyt
pytanie zadane 19 listopada 2019 w C i C++ przez nanautzin Obywatel (1,510 p.)
Witam

Mam problem z funkcją getline,

getline(cin,zmienna_string);
plik<<zmienna_string<<endl;

Używam w taki sposób i nie daje mi możliwości wpisania wartości tylko przechodzi do następnej lini a w pliku zapisuje pustą linię.

Z góry dziękuję za odpowiedź
1
komentarz 19 listopada 2019 przez niezalogowany
edycja 19 listopada 2019
nie widzę związku, ale zawsze możesz zrobić plik.tellg(), seekg()

https://www.geeksforgeeks.org/set-position-with-seekg-in-cpp-language-file-handling/

edit:: chyba że wpisujesz pustą linię z klawiatury

2 odpowiedzi

+1 głos
odpowiedź 19 listopada 2019 przez Inn Gaduła (4,300 p.)
wybrane 23 listopada 2019 przez nanautzin
 
Najlepsza

Rozwiązaniem twojego problemu będzie użycie:

cin.ignore();

Lub

cin.clear();
cin.sync();

Przed użyciem getline().

 

1
komentarz 19 listopada 2019 przez j23 Mędrzec (194,920 p.)

Tę opcje z sync ludzie często proponują, choć - zdaje się - nie rozumieją, o co w niej chodzi (bo jakby wiedzieli, to nie proponowaliby).

komentarz 23 listopada 2019 przez nanautzin Obywatel (1,510 p.)

@Inn, Dziękuję za odpowiedź 

cin.ignore();

rozwiązuje mój problem

cin.clear();

nie działa w moim przypadku

cin.sync();

również działa

komentarz 23 listopada 2019 przez nanautzin Obywatel (1,510 p.)
@j23, mógłbyś wyjaśnić o co chodzi?
1
komentarz 23 listopada 2019 przez Inn Gaduła (4,300 p.)

@nanautzin,

 cin.clear(); 

Sama metoda odpowiada za czyszczenie flag błędu, tak aby następne operacje I/O działały.
Także nic dziwnego że użyta sama 'nic nie robi'

1
komentarz 23 listopada 2019 przez j23 Mędrzec (194,920 p.)

@nanautzin, metoda sync  służy do synchronizowania bufora strumienia ze źródłem danych, a nie do czyszczenia bufora. Tak naprawdę to, jak zachowa się ta metoda, zależy w głównej mierze od implementacji biblioteki. Na tym polega błąd propozycji @Inn.

Jak chcesz usunąć linię z błędnymi danymi, to użyj clear i ignore (choć z tego, co napisałeś w komentarzu do mojej odpowiedzi, chodziło po prostu o zalegający znak końca linii).

+1 głos
odpowiedź 19 listopada 2019 przez j23 Mędrzec (194,920 p.)

Jeśli przed std::getline czytasz jakąś liczbę operatorem >>, wtedy zrób tak:

std::getline(std::cin >> std::ws, zmienna_string); 

 

komentarz 23 listopada 2019 przez nanautzin Obywatel (1,510 p.)
Dziękuje za odpowiedź, również twoje rozwiązanie działa

Podobne pytania

0 głosów
1 odpowiedź 235 wizyt
pytanie zadane 4 stycznia 2016 w C i C++ przez martix3 Użytkownik (690 p.)
0 głosów
0 odpowiedzi 307 wizyt
pytanie zadane 27 kwietnia 2020 w C i C++ przez Emiel Regis Nowicjusz (120 p.)
0 głosów
2 odpowiedzi 434 wizyt

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...