C++ C++-当检查输入是否为整数时,While循环不断重复-
我想做一个模运算。我要求用户输入两个数字,因为模只对整数起作用,所以我有一个while循环来检查输入是否是整数。然后while循环要求用户重新输入这两个数字。但是while循环不断重复,不允许用户重新输入数字。这样做的正确做法是什么C++ C++-当检查输入是否为整数时,While循环不断重复-,c++,while-loop,modulus,C++,While Loop,Modulus,我想做一个模运算。我要求用户输入两个数字,因为模只对整数起作用,所以我有一个while循环来检查输入是否是整数。然后while循环要求用户重新输入这两个数字。但是while循环不断重复,不允许用户重新输入数字。这样做的正确做法是什么 #包括 使用名称空间std; 整数模(整数,整数,结构计算器); 结构计算器 { 每_numb1的整数,每_numb2的整数; int per_Result;}; int main() { 计算机操作1; cout>操作1.per_numb1; cout>操作1
#包括
使用名称空间std;
整数模(整数,整数,结构计算器);
结构计算器
{
每_numb1的整数,每_numb2的整数;
int per_Result;};
int main()
{
计算机操作1;
cout>操作1.per_numb1;
cout>操作1.per2;
而(!(cin>>操作1.按编号1)| |!(cin>>操作1.按编号2))
{
cout操作1.per_numb1;
cout>操作1.per2;
}
操作1.per_结果=模数(操作1.per_编号1,操作1.per_编号2,操作1);
cout当输入解析失败时,无效的输入数据将保留在流中。您需要
通过调用cin.clear()
清除流错误状态
并跳过剩余的无效输入
重构为如下内容:
#include <iostream>
#include <string>
#include <limits>
using namespace std;
class Calculator
{
public:
static int Modulus (int n1, int n2);
};
int Calculator::Modulus (int n1, int n2)
{
return n1 % n2;
}
int getInt(string msg)
{
int aa;
cout << msg;
cin >> aa;
while (cin.fail())
{
cin.clear();
cin.ignore(std::numeric_limits<streamsize>::max(),'\n');
cerr << "Input was not an integer!" << endl;
cout << msg;
cin >> aa;
}
return aa;
}
int main ()
{
int num1 = getInt("Enter first value: ");
int num2 = getInt("Enter second value: ");
int value = Calculator::Modulus(num1,num2);
cout << "Answer:" << value << endl ;
}
#包括
#包括
#包括
使用名称空间std;
类计算器
{
公众:
静态int模数(int n1,int n2);
};
整数计算器::模数(整数n1,整数n2)
{
返回n1%n2;
}
int getInt(字符串消息)
{
int aa;
cout>aa;
while(cin.fail())
{
cin.clear();
cin.ignore(std::numeric_limits::max(),'\n');
cerr如果输入失败,您需要清除输入流。我尝试在while循环中使用cin.clear(Operation1.per_numb1)和cin.clear(Operation1.per_numb2),但仍然无法工作可能重复我将在何处调用cin.clear()。是在我要求用户重新输入号码之后吗?@user2203675在您无法从用户那里获得号码之后。您能给我看一份我的程序的编辑副本吗,这样我就可以知道确切的位置。我尝试了您告诉我的内容,但它仍然不起作用。我还没有学习有关课程的知识。我可以在我拥有的原始程序中更改哪些细节请注意,它如何使用cin.fail()
检查错误,以及如何使用cin.clear()
和cin.ignore()
清除输入流和错误。谢谢。我使用了cin.ignore()(std::numeric_limits::max(),“\n”);
#include <iostream>
#include <string>
#include <limits>
using namespace std;
class Calculator
{
public:
static int Modulus (int n1, int n2);
};
int Calculator::Modulus (int n1, int n2)
{
return n1 % n2;
}
int getInt(string msg)
{
int aa;
cout << msg;
cin >> aa;
while (cin.fail())
{
cin.clear();
cin.ignore(std::numeric_limits<streamsize>::max(),'\n');
cerr << "Input was not an integer!" << endl;
cout << msg;
cin >> aa;
}
return aa;
}
int main ()
{
int num1 = getInt("Enter first value: ");
int num2 = getInt("Enter second value: ");
int value = Calculator::Modulus(num1,num2);
cout << "Answer:" << value << endl ;
}