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

Błąd z getline

0 głosów
540 wizyt
pytanie zadane 22 grudnia 2020 w C i C++ przez rinsu Nowicjusz (170 p.)

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;
}

 

komentarz 22 grudnia 2020 przez wizarddos Nałogowiec (28,110 p.)

dodawałeś?

#include<string>

 

komentarz 22 grudnia 2020 przez rinsu Nowicjusz (170 p.)
Tak, nic to nie pomogło. Dodam, że przed main w void czytaj użyłem getline i tam działa bez problemu.
komentarz 22 grudnia 2020 przez tkz Nałogowiec (42,040 p.)

@rinsu, A jak brzmi ten błąd? 

komentarz 22 grudnia 2020 przez wizarddos Nałogowiec (28,110 p.)
A dodawałeś windows.h? Mi się wydaje że tam jest system()
2
komentarz 22 grudnia 2020 przez tkz Nałogowiec (42,040 p.)

Jest w <cstdlib>

1 odpowiedź

0 głosów
odpowiedź 22 grudnia 2020 przez tangarr Mędrzec (155,120 p.)

Nadpisujesz Przesłaniasz zmienną wybor2 w linii 82.

komentarz 22 grudnia 2020 przez rinsu Nowicjusz (170 p.)
Dzięki wielkie, nie spodziewałem się, że błąd będzie tak prozaiczny.

Podobne pytania

0 głosów
0 odpowiedzi 872 wizyt
pytanie zadane 16 kwietnia 2022 w C i C++ przez PoebWKlapkach Nowicjusz (120 p.)
+2 głosów
1 odpowiedź 311 wizyt
pytanie zadane 12 lipca 2021 w C i C++ przez n0sk1llexe Początkujący (300 p.)
+1 głos
2 odpowiedzi 1,027 wizyt
pytanie zadane 17 kwietnia 2021 w C i C++ przez Doge Gaduła (3,420 p.)

93,778 zapytań

142,737 odpowiedzi

323,388 komentarzy

63,382 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...