Ввод std::getline не работает должным образом в C++

Возможный дубликат:
Нужна помощь с getline()< br> getline не запрашивает ввод?

Я работаю над следующим кодом:

int main()
{
    int num;
    string str;
    cin>>num;
    int points[num][2];
    for(int i=0;i<num;i++)
    {
        cout<<"\nPoint"<<i<<":";
        getline (cin,str);
        points[i][0]=atoi(&str[0]);
        points[i][1]=atoi(&str[2]);
    }

    for(int i=0;i<num;i++)
    {
        cout<<"\npoint"<<i<<" = "<<points[i][0]<<" "<<points[i][1];
    }

Проблема с приведенным выше кодом, который я получаю, заключается в том, что я ввожу значение num как целое число, а затем нажимаю ввод вместо печати...

"Точка 0:"

... и ожидая моего ввода, он печатает «Точка 0:» и «Точка 1:», а затем принимает ввод для точки 1.

Для точки 0 он автоматически принимает ввод как 0 и 0.


person Antrromet    schedule 25.10.2011    source источник
comment
cin оставляет символ новой строки в потоке.   -  person Prince John Wesley    schedule 25.10.2011
comment
Под неправильным вы подразумеваете ввод вместо ввода? (-;   -  person Roee Gavirel    schedule 25.10.2011
comment
error: ISO C++ forbids variable-size array ‘points’: Хотите опубликовать свой реальный код?   -  person Johnsyweb    schedule 25.10.2011
comment
@Johnsyweb: Это может быть настоящий код OP, который, возможно, OP компилирует с расширением компилятора, поддерживающим массивы переменной длины.   -  person Alok Save    schedule 25.10.2011


Ответы (2)


Следуя ответу принца Джона Уэсли, попробуйте

    cin >> num >> endl;

для очистки буфера потока перед его повторным использованием.

person Philip Langford    schedule 25.10.2011
comment
Вы пробовали это? Что случилось? - person Johnsyweb; 25.10.2011
comment
@Antromet: Правда? С каким компилятором? - person Johnsyweb; 26.10.2011
comment
@Johnsyweb: я думал, что это тоже не должно компилироваться, но я видел, как cin >> endl; использовался для этой цели раньше, хотя решение, которое вы разместили ниже, определенно безопаснее. - person Philip Langford; 26.10.2011

Ваша программа не использовала новую строку после:

cin >> num;

Обычный способ сделать это таков:

std::cin.ignore(std::numeric_limits<streamsize>::max(), '\n');

numeric_limits определяется в <limits>.

person Johnsyweb    schedule 25.10.2011