在执行时进行输入验证

Input validation in do-while

本文关键字:输入 验证 执行      更新时间:2023-10-16

我遇到了输入错误的问题。我的输入已验证,但我的错误消息"范围无效。请输入范围 0-100:",如果输入无效,则不显示。

下面是一个示例:

Please Enter Grade 1: 101 (It does not accept input)
Please Enter Grade 1: 321 (It does not accept input)

而不是显示:

Please Enter Grade 1: 101 (It does not accept input)
Invalid Rage. Please Enter Range 0-100.
Please Enter Grade 1: 

这是我的代码:

for(vector<double>::size_type i = 0; i < 15; i++)
  {
    do
    {
         cout << "Please Enter Grade "<< i + 1 <<": " << flush;
            cin >> gradesVector[i];
        }
        while(gradesVector[i] < 0.0 || gradesVector[i] > 100.0);
        { 
            cout << "Invalid Rage. Please Enter Range 0-100:n";
                cout << "Please Enter Grade "<< i + 1 <<": " << flush;
                    cin >> gradesVector[i];
         }   
}

您的while()条件应该是

while(gradesVector[i] < 0.0 || gradesVector[i] > 100.0)并使用此代码

for(vector<double>::size_type i = 0; i < 15; i++)
  {
   int c=0;
    do
    {
        if(c!=0)   //checking that we didnt entered loop for first time
          cout << "Invalid Rage. Please Enter Range 0-100:n";         
           cout << "Please Enter Grade "<< i + 1 <<": " << flush;
           cin >> gradesVector[i];
           c++;   
     }
        while(gradesVector[i] < 0.0 || gradesVector[i] > 100.0);
}

您正在将do结构与while混合。使用其中之一,而不是同时使用两者。此外,您在while中的测试也没有意义。它不能同时越来越少。编辑到以下内容,它应该可以工作

for(vector<double>::size_type i = 0; i < 15; i++)
    {
        cout << "Please Enter Grade "<< i + 1 <<": " << flush;
        cin >> gradesVector[i];
        while(gradesVector[i] < 0.0 || gradesVector[i] > 100.0); // or not and
        { 
            cout << "Invalid Rage. Please Enter Range 0-100:n";
                cout << "Please Enter Grade "<< i + 1 <<": " << flush;
                    cin >> gradesVector[i];
        }   
    }

你的 while 条件不对。

std::vector<double> gradesVector;
gradesVector.reserve(15);
for (std::vector<double>::size_type i = 0; i < 15; i++)
{
    double grade;
    std::cout << "Please Enter Grade " << i + 1 << ": " << std::flush;
    std::cin >> grade;
    while (grade < 0.0 || grade > 100.0)
    {
        std::cout << "Invalid Range. Please Enter Range 0-100:n";
        std::cin >> grade;
    }
    gradesVector.push_back(grade);
}

此外,我只会在等级有效后将其添加到向量中。