Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[c++] Dziwne zachowanie fstream

Ostatnio zmodyfikowano 2013-05-05 14:44
Autor Wiadomość
wojownik266
Temat założony przez niniejszego użytkownika
[c++] Dziwne zachowanie fstream
» 2013-05-05 13:46:01
Mógłby ktoś powiedzieć co jest źle napisane w tym programie i dlaczego funkcja nowy_czytelnik w takiej postaci jak niżej.. Nie zapisuje wprowadzanych danych do pliku.? Kiedy w funkcji main wywołam samą funkcje to wszystko jest ok. Miłego dnia!

C/C++
#include <iostream>
#include <string>
#include <fstream>
using namespace std;

int nowy_czytelnik()
{
    ofstream out( "czytelnik.txt", ios::app );
    string line;
    cout << "Podaj imie i nazwisko:";
    if( out.is_open() )
    {
        getline( cin, line );
        out << line << endl;
    }
    out.close();
    return 0;
}

int main()
{
    int i = 0;
    cout << "BIBLIOTEKA NARODOWA" << endl;
    cout << "-------------------" << endl;
    cout << "----MENU WYBORU----" << endl;
    cout << "-------------------\n" << endl;
    cout << "[1].Dodaj czytelnika" << endl;
    cout << "\nWpisz numer opcji:";
    cin >> i;
    switch( i )
    {
    case 1: nowy_czytelnik(); break;
    }
   
   
    cin.get();
    return 0;
}
P-82094
Monika90
» 2013-05-05 14:06:29
To dlatego, że jak wpiszesz numer opcji i naciśniesz Enter, to w strumieniu zostaje znak końca wiersza. Bo
cin >> i;
 wczyta tylko liczbę, a pozostawia w strumieniu to co było po niej. Więc kiedy później wywołasz getline, to getline natrafi od razu na znak końca wiersza i wczyta pustą linię.

Dopisane:
Dodanie
cin.ignore();
 po
cin >> i;
 rozwiąże problem.
P-82095
wojownik266
Temat założony przez niniejszego użytkownika
» 2013-05-05 14:09:46
Wszystko to co napisałaś jest dla mnie jasne i zrozumiałe.... A czy mogłabyś napisać jak obejść ten problem ilustrując to kawałkiem odpowiedniego kodu? Bedzie to coś w rodzaju "getline(cin,li).get()"?
P-82096
pekfos
» 2013-05-05 14:25:02
C/C++
cin.ignore();
P-82099
wojownik266
Temat założony przez niniejszego użytkownika
» 2013-05-05 14:44:39
Bardzo bardzo dziękuję za odpowiedzi i zamykam temat:D
P-82102
« 1 »
  Strona 1 z 1