をスキップしながら私は現在、この機能を持っている:ループはライン
double GrabNumber() {
double x;
cin >> x;
while (cin.fail()) {
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cout << "You can only type numbers!\nEnter the number: ";
cin >> x;
}
return x;
}
その目的はx
はそれがない場合は、それが有効かcin >> x
を繰り返すことであれば、それを返し、有効な数値であるかどうかを確認することです。
それは、この関数の間と呼ばれています:
void addition() {
cout << "\nEnter the first number: ";
double a = GrabNumber();
cout << "Enter the second number: ";
double b = GrabNumber();
// rest of code
私は、たとえば入力し、「6+」、それは最初の数字を入力するように私に語ったとき、それはそれを受け入れたが、すぐに二行目に行くと、それを呼び出します私が入力したこともないエラーです。
最初の入力は「6」しか受け付けないが、「+」はエラーを返す2番目の入力に行くからだと考えている。したがって、while
のパラメータに問題がある必要があります。
あなたは['getline'](http:// www .complusplus.com/reference/string/string/getline /)と同様に 'cin'を使うのではなく、 – Garf365
のように完全な行を解析しますが、Getlineは文字列として読み込みます –