Почему cin не выполняется внутри цикла for? - PullRequest
0 голосов
/ 07 июня 2018
#include <iostream>
#include <vector>
using namespace std;
typedef vector<double> vec;                    //vec now acts like a datatype
int main()
{
    vec powers;                                //stores powers of x in the objective function
    vec coefficients;                          //stores coefficients of x in the objective function
    double pow;
    double coeff = 0;
    cout << "Enter powers of x present in the objective function and enter any character to stop" << endl;
    cout << "REMEMBER TO ENTER 0 IF CONSTANT EXISTS!" << endl;
    while (cin >> pow)
        powers.push_back(pow);                //Working fine
    cout << endl;
    for (vec::iterator iter_p = powers.begin(); iter_p != powers.end(); iter_p++)
    {
        double coeff;
        cout << "Enter coefficient of the (x^" << *iter_p << ") term: ";
        cin >> coeff;                          //THIS IS NOT EXECUTING
        coefficients.push_back(coeff);         //NOT WORKING EITHER
    }
    cout << endl;
    return 0;
    system("pause");
}

Я хочу ввести степени полиномиального уравнения вместе с коэффициентами.Я могу хранить свои полномочия в векторе.Но в цикле for, который я использую для ввода коэффициентов, cin просто не выполняется.Я был бы очень признателен, если бы кто-нибудь мог понять, что именно вызывает оператор cin.

1 Ответ

0 голосов
/ 07 июня 2018

Проблема в том, что вы говорите пользователю вводить символ до конца

while (cin >> pow)
    powers.push_back(pow);

Пока это работает, он также переводит cin в состояние ошибки и оставляет символ в буфере.Вам нужно очистить это состояние ошибки и избавиться от символа, оставшегося во входных данных.Это можно сделать, добавив

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

после цикла while.clear очищает ошибки, а вызов ignore избавляет от любых символов, оставшихся во входных данных.

...