C++ C++-当检查输入是否为整数时,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

我想做一个模运算。我要求用户输入两个数字,因为模只对整数起作用,所以我有一个while循环来检查输入是否是整数。然后while循环要求用户重新输入这两个数字。但是while循环不断重复,不允许用户重新输入数字。这样做的正确做法是什么


#包括
使用名称空间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 ;
     }