Witajcie, poniżej daję kod. W 137 linii mam zastosowany getline do wczytania tekstu a konsola zwraca błąd z niewiadomego mi powodu. Z góry dzięki za pomoc.
#include <iostream>
#include <cstdlib>
#include <cstdio>
using namespace std;
struct Powiesci
{
int nr;
string tytul;
string gatunek;
float ocena;
};
Powiesci klasa[30];
int n=0, i, j, nr, wybor; float ocmax;
string wybor2;
void czytaj(Powiesci a[])
{
cout << "Podaj dane ksiazki." << endl;
cout << "Podaj nr: "; cin >> a[i].nr;
cout << "Podaj tytul: ";
cin.ignore();
getline(cin,a[i].tytul);
cout << "Podaj gatunek: ";
cin.ignore();
getline(cin,a[i].gatunek);
cout << "Podaj ocene: "; cin >> a[i].ocena;
while(a[i].ocena<0||a[i].ocena>5)
{
cout<<"Ocena musi byc z zakresu <0;5>"<<endl;
cout<<"Podaj ocene: "<<endl;
cin>>a[i].ocena;
}
}
void pisz (Powiesci a[])
{
cout.width(3); cout << a[i].nr;
cout.width(14); cout << a[i].tytul;
cout.width(10); cout << a[i].gatunek;
cout.width(6); cout << a[i].ocena << endl;
}
int main()
{
do
{
system("cls");
cout << "Wybierz czynnosc:" <<endl;
cout << "1=wczytanie danych, 2=wyswietlenie danych, 3=wybor najlepszej ksiazki, 4=sortowanie, 5=wybor gatunku z klawiatury, 0=koniec" << endl;
cin >> wybor;
switch (wybor)
{
case 1:
cout<<"Podaj liczbe ksiazek"<<endl;
cin>>n;
for (i=0;i<n;i++)
czytaj(klasa);
break;
case 2: cout << "Aktualna liczba uczniow = " << n << endl;
cout << "Oto wczytane dane:" << endl;
cout.width(3); cout << "nr";
cout.width(14); cout << "tytul";
cout.width(10); cout << "gatunek";
cout.width(6); cout << "ocena" << endl;
for (i=0;i<n;i++)
{
pisz (klasa);
}
system("pause");
break;
case 3: ocmax=klasa[0].ocena;
for (i=1;i<n;i++)
{
if (klasa[i].ocena>ocmax)
{
ocmax=klasa[i].ocena;
nr=i;
}
}
cout << "Najlepsza ksiazka jest " << klasa[nr].tytul << " " << klasa[nr].gatunek << " ze srednia = " << klasa[nr].ocena << endl;
system("pause");
break;
case 4: cout << "Sortowanie wg: 1 = oceny, 2 = tytulu, 3 = gatunku"<< endl;
int wybor2;
cin >> wybor2;
switch(wybor2)
{
case 1: for (i=1;i<n;i++)
{
for (j=1;j<n;j++)
{
if (klasa[j-1].ocena<klasa[j].ocena)
{
Powiesci bufor;
bufor=klasa[j-1];
klasa[j-1]=klasa[j];
klasa[j]=bufor;
}
}
}
cout << "Oto uczniowie po sortowaniu:" << endl;
cout.width(3); cout << "nr";
cout.width(14); cout << "nazwisko";
cout.width(10); cout << "imie";
cout.width(6); cout << "sr" << endl;
for (i=0;i<n;i++)
{
pisz (klasa);
}
system("pause");
break;
case 2: for (i=1;i<n;i++)
{
for (j=1;j<n;j++)
{
if (klasa[j-1].nr>klasa[j].nr)
{
Powiesci bufor;
bufor=klasa[j-1];
klasa[j-1]=klasa[j];
klasa[j]=bufor;
}
}
}
cout << "Oto uczniowie po sortowaniu:" << endl;
cout.width(3); cout << "nr";
cout.width(14); cout << "nazwisko";
cout.width(10); cout << "imie";
cout.width(6); cout << "sr" << endl;
for (i=0;i<n;i++)
{
pisz (klasa);
}
system("pause");
break;
}
case 5: cout<<"Podaj gatunek: "<<endl;
cin.ignore();
getline(cin,wybor2);
for(i=0;i<n;i++)
{
if(wybor2==a[i].gatunek)
{
cout.width(3); cout << a[i].nr;
cout.width(14); cout << a[i].tytul;
cout.width(10); cout << a[i].gatunek;
cout.width(6); cout << a[i].ocena << endl;
}
}
}
}
while (wybor!=0);
cout << "Dziekuje za wspolna prace. Zycze milego dnia!" << endl;
return 0;
}