我正在尝试创建一个读取范围限制的简单程序,然后在这些范围之间创建一个随机数。一切都在我的程序中运行,但是当我运行代码时,第一条消息打印给用户,然后我输入我的最大范围,按回车键,光标移动到下一行,仍然要求输入。
我的代码中没有看到导致这种情况的原因,我很难过。
到目前为止,这是我的代码:
#include<iostream>
#include<limits>
using std::cout;
using std::cin;
using std::endl;
int main(){
int maxRange; //to store the maximum range of our random numbers
do {
cout << "Please enter a maximum range \n";
//use clear funtion to clear the fail bit
cin.clear();
//use ignore function to avoid bad input
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
} while(!(cin >> maxRange)); //continue loop if cin fails
int minRange; //to store the minimum range of random numbers
do {
cout << "Please enter a minimum range \n";
//use clear funtion to clear the fail bit
cin.clear();
//use ignore function to avoid bad input
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
} while(!(cin >> minRange)); //continue loop if cin fails
int randomNumber = rand() % maxRange + minRange;
cout << "The random number that you have generated is: " << randomNumber << endl;
return 0;
}
编辑: 问题是忽略功能。这是我纠正的循环的工作代码:
if(!(cin)){
cin.clear();
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
答案 0 :(得分:3)
在尝试读取循环条件中的值之前,第一个cin.ignore()
循环中的do..while()
会丢弃您的第一行输入。如果您输入两次最大范围,您的程序会(某种程度)工作,因为它成功读取了第二行。也许在第一个循环中删除cin.ignore()
行。
稍后您在选择随机数时也会出现错误,但是......
int randomNumber = rand() % maxRange + minRange;
应该是:
int randomNumber = rand() % (1 + maxRange - minRange) + minRange;
获得minRange
到maxRange
的范围。