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

[c++] Błąd w pętli przy funkcji getline.

Ostatnio zmodyfikowano 2015-01-15 23:04
Autor Wiadomość
Dathavi
Temat założony przez niniejszego użytkownika
[c++] Błąd w pętli przy funkcji getline.
» 2015-01-15 19:18:30
Treść zadania: definiuj typ strukturalny oraz 100-elementową tablicę
pozwalającą przechowywać informacje o książkach w bibliotece
(tytuł, autor, indeks, cena) oraz napisz funkcję, która wyświetli na ekranie
wszystkie dane tanich książek (tzn. cena<10zł)

Stworzyłem cos takiego:

C/C++
#include <iostream>
#include <string>
#include <conio.h>

using namespace std;

struct ksiaz
{
   
    string tytul;
    string autor;
    int index;
    int cena;
};

char niz10( ksiaz ksiazka[] )
{
   
    for( int i = 0; i < 5; i++ )
    {
        if( ksiazka[ i ].cena < 10 )
        {
            cout << "tytul: " << ksiazka[ i ].tytul << endl;
            cout << "autor: " << ksiazka[ i ].autor << endl;
            cout << "cena: " << ksiazka[ i ].cena << endl;
            cout << "index: " << ksiazka[ i ].index << endl;
        }
    }
}

int main()
{
    ksiaz ksiazka[ 5 ];
    cout << "podaj dane ksiazek: " << endl;
   
    for( int i = 0; i < 5; i++ )
    {
        cout << "podaj tytul " << endl;
        getline( cin, ksiazka[ i ].tytul );
        cout << "podaj autora " << endl;
        getline( cin, ksiazka[ i ].autor );
        cout << "cena" << endl;
        cin >> ksiazka[ i ].cena;
        cout << "indeks" << endl;
        cin >> ksiazka[ i ].index;
       
    }
   
    cout << "dane ksiazek ponizej 10 zlotych: " << endl;
   
    cout << niz10( ksiazka ) << endl;
   
   
   
   
    return 0;
}


I problemem jest to, że program pomija wczytywanie tytułu przy 2 pętli i każdej kolejnej z niewiadomych mi przyczyn. Ktoś wie co może być tego przyczyną?
P-124989
pekfos
» 2015-01-15 19:22:04
Nie pomijasz znaku nowej linii zostawionego przez >>.
P-124990
NopeDotAvi
» 2015-01-15 19:23:10
po pierwszym getline użyj
std::cin.clear(); i std::cin.sync();
 albo
std::cin.ignore();
P-124992
Dathavi
Temat założony przez niniejszego użytkownika
» 2015-01-15 20:40:24
std::cin.clear();
 i
std::cin.sync();
 nic nie robi, dalej to samo, a
std::cin.ignore();
 robi to, ze zamiast pierwszego getline zaczyna sie drugi pomijac :), a kiedy wstawie po obydwu program sie wysypuje przy drugiej petli i na dodatek
std::cin.ignore();
 kaze mi jeszcze jakas daną wpisac. Z tymi znakami nowej linii to nie wiem co mam zmienic.
P-125002
pekfos
» 2015-01-15 20:42:00
A gdzie wstawiłeś wywołanie ignore()?
P-125003
Dathavi
Temat założony przez niniejszego użytkownika
» 2015-01-15 20:44:16
Pod getline
P-125004
pekfos
» 2015-01-15 22:28:20
Wstaw zaraz po ostatnim cin >> w pętli.
P-125011
Dathavi
Temat założony przez niniejszego użytkownika
» 2015-01-15 23:04:31
Ok teraz dziala dzieki, nie wiem czemu tak sie dzieje ale ok :D. ty ppl
P-125014
« 1 »
  Strona 1 z 1