[c++] Błąd w pętli przy funkcji getline.
Ostatnio zmodyfikowano 2015-01-15 23:04
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: #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ą? |
|
pekfos |
» 2015-01-15 19:22:04 Nie pomijasz znaku nowej linii zostawionego przez >>. |
|
NopeDotAvi |
» 2015-01-15 19:23:10 po pierwszym getline użyj std::cin.clear(); i std::cin.sync(); albo std::cin.ignore(); |
|
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. |
|
pekfos |
» 2015-01-15 20:42:00 A gdzie wstawiłeś wywołanie ignore()? |
|
Dathavi Temat założony przez niniejszego użytkownika |
» 2015-01-15 20:44:16 Pod getline |
|
pekfos |
» 2015-01-15 22:28:20 Wstaw zaraz po ostatnim cin >> w pętli. |
|
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 |
|
« 1 » |