getline() nie wpisuje wartości do tablicy.

0

Witam, mam pytanie związane z funkcja getline(). Funkcja ta nie wiem dlaczego nie wpisuje mi wartości do tablicy za pomocą pętli natomiast wypisuje tylko wartość ostatnią. Prosiłbym o wyjaśnienie tego zjawiska. Uczę się programować od 3 dni i najwidoczniej nie rozumiem zasady działania tej funkcji.```

#include <iostream>
using namespace std;
int main()
{
    int netto[3],vat[3],brutto[3];
    string opis[3];
    for(int i=0; i <= 2; i++)
    {

        cout<<"Podaj Cene Netto Towaru nr: "<<i+1<<endl;
        cin>>netto[i];
        cout<<"Opis Towaru"<<endl;

        for(int j=0; j <= 1; j++)
        {

            getline(cin, opis[j]);

        }
    }

    for(int k=0; k <= 2; k++){
       vat[k]=(0.01*23*netto[k]);
       brutto[k]=vat[k]+netto[k];
    }

 for(int g=0; g <= 2; g++){

  cout<<opis[g];

 }


    return 0;
}
1

W jakim celu stworzyłeś tę pętlę: for(int j=0; j <= 1; j++)?

3

Nie mieszaj cin i getline. Domyślnie cin pobiera do białego znaku (np. nowej linii), więc w buforze zostaje ten znak nowej linii. getline() domyślnie pobiera do znaku nowej linii, czyli w takim wypadku pobiera tylko ten znak i kończy pracę.

0
Patryk27 napisał(a):

W jakim celu stworzyłeś tę pętlę: for(int j=0; j <= 1; j++)?

Bez tej pętli nie mogłem wpisać wartości do zmiennej "opis" działo się coś takiego
title
title

0
kq napisał(a):

Nie mieszaj cin i getline. Domyślnie cin pobiera do białego znaku (np. nowej linii), więc w buforze zostaje ten znak nowej linii. getline() domyślnie pobiera do znaku nowej linii, czyli w takim wypadku pobiera tylko ten znak i kończy pracę.

Okej, zastąpiłem getline() porostu cin i wszystko ładnie działa dopóki w opisie nie występuje spacja, jeżeli występuje wszystko się wysypuje dlatego myślałem że trzeba zaczytać całą linie getline()
Nasuwa mi się pytanie skoro nie cin i getline() to jak może to wykonać ?.

2

Było powiedziane „nie mieszaj”, a nie nie używaj getline. Jeśli potrzebujesz zawsze całe linie, to sam getline będzie wygodniejszy. Jak nie, to przeczytaj dokumentację iostream i zobacz, co która rzecz robi z białymi znakami i z buforem.


Przysięgam, czasem mam wrażenie, że to jest celowo zrobione tak, żeby ludziom utrudniać życie…

1
Althorion napisał(a):

Było powiedziane „nie mieszaj”, a nie nie używaj getline. Jeśli potrzebujesz zawsze całe linie, to sam getline będzie wygodniejszy. Jak nie, to przeczytaj dokumentację iostream i zobacz, co która rzecz robi z białymi znakami i z buforem.


Przysięgam, czasem mam wrażenie, że to jest celowo zrobione tak, żeby ludziom utrudniać życie…

Dziękuje za pomoc funkcja cin.ignore() pomogła.

1 użytkowników online, w tym zalogowanych: 0, gości: 1