2

モジュラス演算を実行しようとしています。モジュラスは整数でのみ機能するため、ユーザーに 2 つの数値を入力するように求めます。入力が整数かどうかを確認する while ループがあります。次に while ループは、ユーザーに 2 つの数字を再入力するように求めます。ただし、while ループは繰り返され続け、ユーザーが数字を再入力する機会を与えません。これを行うには何が適切でしょうか?


#include <iostream>
using namespace std;

int Modulus (int, int,struct Calculator);

struct Calculator
{
    int per_numb1, per_numb2;
    int per_Result; };

int main () 
{ 
    Calculator Operation1;

    cout << "\nPlease enter the first number to calculate as a modulus: "; 
    cin >> Operation1.per_numb1; 

    cout << "\nPlease enter the second number to calculate modulus: "; 
    cin >> Operation1.per_numb2; 

while ( !( cin >> Operation1.per_numb1)  ||   !( cin >> Operation1.per_numb2))
{ 

        cout << "\nERROR\nInvalid operation \nThe first number or second number   must be an integer"; 
        cout << "\n\nPlease re-enter the first number to begin Modulus: "; 
        cin >> Operation1.per_numb1;  

        cout << "\nPlease re-enter the second number to begin Modulus: ";
        cin >> Operation1.per_numb2;
}





Operation1.per_Result = Modulus(Operation1.per_numb1, Operation1.per_numb2, Operation1); 

cout << "\nThe result  is: " << Operation1.per_Result << endl;

}

int Modulus (int n1, int n2, struct Calculator)
{
    int Answer; 

    Answer = n1 % n2; 

    return Answer; 
} 
4

2 に答える 2

3

次のようなものにリファクタリングします。

 #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 ;
 }
于 2013-03-24T03:30:03.290 に答える
2

入力の解析が失敗すると、無効な入力データがストリームに残ります。必要がある

  1. を呼び出して、ストリームのエラー状態をクリアしますcin.clear()
  2. 残りの無効な入力をスキップします。

この質問への回答を参照してください。

于 2013-03-24T03:10:01.903 に答える