2016-09-27 3 views
2

私はユーザーの入力の平均を計算するプログラムを作成しています。私は入力チェッカーのために何を使用するのかまだ分かりませんでした。まだ配列や文字列を使うことはできません。両方の入力が数値であることを確認するにはどうすればよいですか?そして、もしそうでなければ。正しい入力を再度尋ねるにはどうすればよいですか?数値入力チェッカーのIFまたはWHILE

#include <iostream> 
using namespace std; 
int main() 
{ 
    // Get number from user 
    int input = 0; 
    double accumulator = 0; 
    double mean; 
    cout << "How many numbers would you like me to average together?\n"; 
    cin >> input; 
    if (input >= 0){ //to check if input is a numerical value 

     // Compute and print the mean of the user input 

     int number = 1; 
     double x; 
     while (number <= input) //while corrected 
     { 
      cout << "Please type a numerical value now: \n"; 
      cin >> x; 
      if (x < 0 || x > 0){ //to check if x is a numerical value 
       accumulator = accumulator + x; 
      } 
      else { 
       cout << "Input incorrect"<< endl; 
      } 
      number = number + 1; 
     } 
     mean = accumulator/input; // formula corrected 
     cout << "The mean of all the input values is: " << mean << endl; 
     cout << "The amount of numbers for the average calculation is: " << input << endl; 
     } 
    else { 
     cout << "Input incorrect"<< endl; 
    } 
    return 0; 
} 
+2

私の推測:ユーザー入力(整数であることを意味する)が有効かどうかを確認する方法はありますか? –

+0

[cin-C++を使用した入力検証のループ](http://stackoverflow.com/a/2076144/620908)を参照してください。 –

答えて

0

エラーを確認するにはcin.failを使用できます。ユーザーが数字の後にアルファベットを入力した場合、123abcとすると、x123として格納されますが、入力バッファにはabcが残っています。これをすぐにクリアして、abcが次のループに現れないようにすることができます。

while (number <= input) //while corrected 
{ 
    cout << "Please type a numerical value now: \n"; 
    cin >> x; 

    bool error = cin.fail(); 
    cin.clear(); 
    cin.ignore(0xFFFF, '\n'); 

    if (error) 
    { 
     cout << "Input incorrect" << endl; 
     continue; 
    } 

    accumulator = accumulator + x; 
    number = number + 1; 
} 

xを初期化することもできます。例えば

double x = numeric_limits<double>::min(); 
cin >> x; 
cin.clear(); 
cin.ignore(0xFFFF, '\n'); 

if (x == numeric_limits<double>::min()) 
{ 
    cout << "Input incorrect" << endl; 
    continue; 
} 

エラーがxが変わらないと、ユーザーがnumeric_limits<double>::min()

は、この問題に関連していない一致する番号を入力することはほとんどありませんので、あなたが、エラーがあったけど、あなたもすべきで、その後発生した場合ゼロで割るエラーを考慮する。

if (input == 0) 
    mean = 0;//avoid divide by zero, print special error message 
else 
    mean = accumulator/input; 
関連する問題