Błędne działanie prostego kodu

0

Witam mam problem ponieważ nie rozumiem dlaczego w trakcie wykonywania program pomija pierwsze getline przy i=0... Wklejam poniżej ten fragment kodu. Próbowałem zmienić wszystko co myślałem że może być winne ale nic to nie dało...

int il;

int main()
{
    cout<<"Podaj ilosc wyrazow"<<endl;
    cin>>il;
    string * wyraz = new string[il];
    for(int i=0; i<il; ++i)
    {
        cout<<"Podaj wyraz "<<i+1<<endl;
        getline(cin,wyraz[i]);
        cout<<wyraz[i]<<endl;
    }
    delete [] wyraz;
    return 0;
}
0

W jaki sposób pomija?

Od siebie dodam tylko to: https://dsp.krzaq.cc/post/176/ucze-sie-cxx-kiedy-uzywac-new-i-delete/

3

Ach, jasne. Mieszasz cin i getline. Po wczytaniu liczby w buforze wejściowym wciąż masz znak nowej linii (po wciśnięciu entera). Aby się go pozbyć użyj zaklęcia:

cin.ignore(numeric_limits<streamsize>::max(), '\n');
#include <iostream>
#include <limits>
#include <string>
int il;

int main()
{
    cout<<"Podaj ilosc wyrazow"<<endl;
    cin>>il;
    cin.ignore(numeric_limits<streamsize>::max(), '\n');
    string * wyraz = new string[il];
    for(int i=0; i<il; ++i)
    {
        cout<<"Podaj wyraz "<<i+1<<endl;
        getline(cin,wyraz[i]);
        cout<<wyraz[i]<<endl;
    }
    delete [] wyraz;
    return 0;
}

Ale serio, wywal to new/delete!

0

Hmmm teraz pojawia się tona błędów po zmianie na vector:/
Trzy przykładowe errory
|19|error: no matching function for call to 'getline(std::istream&, std::vector<std::basic_string<char> >&)'|
|19|note: 'std::vector<std::basic_string<char> >' is not derived from 'std::basic_string<_CharT, _Traits, _Alloc>'|
|20|error: no match for 'operator<<' (operand types are 'std::ostream {aka std::basic_ostream<char>}' and 'std::vector<std::basic_string<char> >')|

Edit. Ok kretyn ze mnie wystarczyło zmienić nawiasy przy wektorze z [il] na (il)...

#include <iostream>
#include <conio.h>
#include <vector>
#include <limits>

using namespace std;

int il;

int main()
{
    cout<<"Podaj ilosc wyrazow"<<endl;
    cin>>il;
    cin.ignore(numeric_limits<streamsize>::max(), '\n');
    vector<string> wyraz[il];
    for(int i=0; i<=il; i++)
    {
        cout<<"Podaj wyraz "<<i+1<<endl;
        getline(cin,wyraz[i]);
        cout<<wyraz[i]<<endl;
    }


    return 0;
}
0

Ma być:

vector<string> wyraz(il);

Nie te nawiasy.
I jeszcze:

for(int i=0; i<il; i++)

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