Мой код квадратного уравнения заканчивается, когда я ввожу нецелое значение, как я могу заставить его зацикливаться правильно? - PullRequest
0 голосов
/ 29 мая 2018

Таким образом, я пытаюсь заставить цикл решения моего квадратного уравнения зацикливаться, если «0» не введено в качестве любого 1 из квадратичных коэффициентов.Он работает до тех пор, пока не будет введено нецелое значение, при котором программа завершается.Мне бы хотелось, чтобы код выдавал сообщение, предлагающее пользователю ввести числовое значение, и продолжил цикл как обычно.

#include <iostream>

#include <cmath>

using namespace std;

int main() {
for ( ; ; ){
float a, b, c, D, x1, x2, real, im;
cout << "Please enter the Quadratic Coefficients" << endl;
cin >> a >> b >> c;
if (cin.fail()){
    cout << "Error, please enter numerical values!" << endl;
    cin >> a >> b >> c;
}
if ((a == 0) || (b == 0) || (c == 0)){
    break;
}
D = b*b - 4*a*c;
if (D < 0) {
    real = -b/(2*a); 
    im = sqrt(-D)/(2*a);
    cout << "Roots are Complex" << endl;
    cout << "x1 = " << real << "+" << im << "i" << endl;
    cout << "x2 = " << real << "-" << im << "i" << endl;

      }
else if (D == 0) {
x1 = (-b + sqrt(D)) / (2*a);
cout << "Real and Repeated Roots" << endl;      
cout << "x1 = " << x1 << endl;
   }
 else if (D > 0) 
{   
  x1 = (-b + sqrt(D)) / (2*a);

  x2 = (-b - sqrt(D)) / (2*a);

cout << "Real and Distinct Roots" << endl;
cout << "x1 = " << x1 << endl;
cout << "x2 = " << x2 << endl;
} } 

  return 0; 
    }

1 Ответ

0 голосов
/ 29 мая 2018

Это решение должно помочь .

cin.fail() переводит входной поток в состояние сбоя, и вам необходимо сбросить его вручную, чтобы заставить его выполнять какую-либо дальнейшую работу.Когда вы снова наберете cin, он заметит свое неисправное состояние и просто продолжит.

cin >> a >> b >> c;
if (cin.fail()){
  cin.clear(); //removes error flags
  cin.ignore(); //ignores last input
  cout << "Error, please enter numerical values!" << endl;
  cin >> a >> b >> c;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...