Новичок. Помогите пожалуйста. C++

409
27 мая 2017, 18:50

Всем привет. Совсем недавно начал изучение плюсов (да и программирования в целом, до этого лишь немного писал на Python).

Суть проблемы: Программа для решения квадратного уравнения. Создал функцию для безопасного ввода переменных(защиту от дураков). Все работает хорошо, за исключением одного аспекта: если ввод некорректен, то при последующем вводе игнорируется даже корректный ввод, однако с 3 попытки переменной все же присваивается значение.

Вот скрин для тех кто не понял. В данном случае переменным присвоились значения 2, 6, 9.

Код:

#include <iostream>
#include <cmath>
using namespace std;
double setValue(string description){
    cout << description;
    double value;
    while(!(cin >> value)){
        cout << description;
        cin.clear();
        cin.sync();
        cin >> value;
    }
    return value;
}
int main(){
    cout << "Quadratic Equation\n\nax^2 + bx + c = 0\n\n";
    double a, b, c;
    a = setValue("Enter a: ");
    b = setValue("Enter b: ");
    c = setValue("Enter c: ");
    if (a == 0){
        cout << "\nAn error occurred! The equation isn't quadratic!";
    }
    else{
        double D = b*b - 4*a*c;
        cout << "\nD = " << D;
        if(D > 0){
            double x1 = (-b + sqrt(D)) / (2*a);
            double x2 = (-b - sqrt(D)) / (2*a);
            cout << "\n\nx1 = " << x1 << "\nx2 = " << x2;
        }
        else if(D == 0){
            double x = -b / (2*a);
            cout << "\n\nx = " << x;
        }
        else{
            cout << "\n\nThe equation has no roots!";
        }
    }
    cin.sync();
    cin.get();
    return 0;
}

Всех заранее благодарю.

READ ALSO
с++ крестики нолики баг

с++ крестики нолики баг

Здравствуйте я новенький в мире программирования c++вот решил устроится стажером в фирму

336
Firebird API создание базы программно

Firebird API создание базы программно

Я использую Firebird API для программного создания базыДля создания базы я использую код из этого поста

251
Angularjs checkbox фильтр, как сделать кнопку сброса выборок

Angularjs checkbox фильтр, как сделать кнопку сброса выборок

Всем приветПомогите решить проблему

314
повторно запускается таймер

повторно запускается таймер

добрый деньнакрутил не очень понимая, но нужно срочно

290