输入验证方法?

时间:2012-02-20 03:49:49

标签: c++

好的,我有点难过。我不知道如何操纵我的代码来执行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);
     }


}

2 个答案:

答案 0 :(得分:2)

你不应该在没有检查的情况下阅读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)

这不是一个提示的答案,因为这是作业。

不要马上做这么多。

如果你从写作开始

  1. 读取一个值的函数
  2. 验证一个
  3. 的函数

    你可以将它们组合成任何类型的输入和放大器。你想要的验证逻辑。

    也就是说,鉴于存在这样的事情:

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

    你可以读取给定数量的值,或读取直到输入非数字;只使用你开始使用的那两个函数就可以轻松完成。