2012-02-20 25 views
0

私はここでうんざりしています。 while loopを実行するためにコードを操作する方法がわかりません。ここにコードのブロックがあります(私は教授の指示に従って配列やベクトルを使うことはできません)。事前に任意のアイデアをありがとう。入力の検証方法は?

//function prompts the user for test scores, validates and stores the input scores 
void getScore(double &score1, double &score2, double &score3, double &score4, double &score5) 
{ 
     cout << "Enter a score: "; 

    //input validation 
    while(score1 < 0 || score1 > 100 || score2 < 0 || score2 > 100 || score3 < 0 || score3 > 100 || score4 < 0 || score4 > 100 || score5 < 0 || score5 > 100) 
    { 
     cout << "Invalid input, all values\n"; 
     cout << "must be between 0 and 100\n"; 
     cin >> score1; 
      cout << "Enter a score: "; 
     cin >> score2; 
      cout << "Enter a score: "; 
     cin >> score3; 
     cout << "Enter a score: "; 
     cin >> score4; 
      cout << "Enter a score: "; 
     cin >> score5; 
     cout << "------------------------" << endl; 

    } 
    if(!(cin >> score >> score2 >> score3 >> score4 >> score5))  
    { 
      cout << "You have entered\n"; 
     cout << "non-numeric input.\n"; 
     cout << "Program is terminated\n"; 
     cout << "Please try again" << endl; 
     exit(0); 
    } 


} 
+0

'私は教授の指示に従って配列やベクトルを使うことはできません。' 'double score [5]'のような単純な配列ではないのですか?それは過度に厳しいようです。 –

+0

@Jesse欲しいです。私は指示に従ってこのプログラムを動作させましたが、バグのようなものがたくさんあります。 – Gmenfan83

+0

配列を使用した[例](http://ideone.com/8v7IR)があります。 –

答えて

2

5つのスコアをチェックせずに読んで、5つのスコアをチェックしてみてください。私はあなたが最初の5つを削除する必要があると思うcincoutとちょうどEnter 5 scores:を印刷します。また、あなたの状態が間違っているあなたがのいずれかがを失敗しているかどうかを確認したいので、

if(!(cin >> score1|| cin >> score2 || cin >> score3 || cin >> score4 || cin >> score5)) 

if(!(cin >> score1 && cin >> score2 && cin >> score3 && cin >> score4 && cin >> score5)) 
// or, as willhelmtell reminded us, if (!(cin >> score1 >> score2 >> score3 >> ...)) 

であるべき

&&が真であるためにそれらすべてを必要とする)、ではない成功||のうちの1つだけがである必要があります)。

+1

または単に 'std :: cin >> score1 >> score 2 >> ...' – wilhelmtell

+0

@wilhelmtellはい、ありがとう、それについてのコメントを追加しました。 –

+0

@SethCarnegieありがとう!それは完璧に機能しましたが、今はwhileループが実行されません。ユーザーが数字以外の何かを入力した場合、それは終了します。 – Gmenfan83

1

これは宿題であるため、これはヒントとしてあまり答えはありません。

一度に多くのことをしないでください。

あなたは

  1. あなたが入力のいずれかの種類にそれらを構成することができます値

を検証する機能を読み込み機能を書き込むことによって起動した場合&検証ロジックが必要です。

これらのようなものが存在することを考えると、次のとおりです。

bool getScore(double& score); // Returns true if a double was input 
bool isValidScore(double score); 

あなたは値の与えられた数を読んで、または非番号が入力されるまで読むことができました。これは、あなたが使い始めた2つの関数を使って簡単に実現できます。