このプログラムは、指定された範囲内の指定された量の数値を出力します。ただし、文字を入力すると、どちらのループでも無限にループします。たとえば、「最大数を入力」cinに文字を入力すると、「最大数を入力」を無限にスパムし、スキップします。 cinとcoutをループします(他の2つのdo-whileについても同じです。誰かが理由を知っていますか?
#include <iostream>
#include <cmath>
#include <cstdlib>
#include <ctime>
using namespace std;
int roll(int mini, int maxi)
{
int v = maxi - mini;
int x = mini + (rand() % (v+1));
return x;
}
void caller()
{
int a;
int b;
int c;
do {
cout << "Enter minimum number" << endl;
cin.clear();
cin >> a;
} while (cin.fail());
do {
cout << "Enter maximum number" << endl;
cin.clear();
cin >> b;
} while (cin.fail() || a > b);
do {
cout << "How many rolls?" << endl;
cin.clear();
cin >> c;
} while (cin.fail());
for (int i = 0; i < c; i++)
cout << roll(a, b) << endl;
}
int main()
{
srand (time(NULL));
caller();
return 0;
}