有没有更简单的方法来写这个?

时间:2014-09-12 02:53:12

标签: c++ if-statement

您好,我正在学习C ++的基础知识,而且我正在完成一项任务。我问是否有更简单的方法来编写这个部分。

if ( 100 >= projectgrade && 0<= projectgrade ) {}
else 
{
    cout<<endl<<"invalid data, please retry again.";
    cin.ignore();
    cin.get();
    return EXIT_SUCCESS;
}
if ( 100 >= midtermgrade && 0<= midtermgrade ) {}
else 
{
    cout<<endl<<"invalid data, please retry again.";
    cin.ignore();
    cin.get();
    return EXIT_SUCCESS;
}
if ( 100 >= finalexamgrade && 0<= finalexamgrade ) {}
else 
{
    cout<<endl<<"invalid data, please retry again.";
    cin.ignore();
    cin.get();
    return EXIT_SUCCESS;
}

是否可以在if的一个括号中写下所有这些限制?我尝试了很多次,但我无法弄清楚。 Ty求助!

4 个答案:

答案 0 :(得分:4)

好吧,如果你检查你的逻辑,那么如果任何等级小于0或大于100,那么就像这样 -

if ( projectgrade < 0 || projectgrade > 100 || 
     midtermgrade < 0 || midtermgrade > 100 || 
     finalexamgrade < 0 || finalexamgrade > 100 
   ) {
  cout<<endl<<"invalid data, please retry again.";
  cin.ignore();
  cin.get();
  return EXIT_SUCCESS;
}

修改 我们总是可以添加#define之类的

#define range(x) x < 0 || x > 100

那么如果可以缩短为

if (range(projectgrade) || range(midtermgrade) || range(finalexamgrade))

答案 1 :(得分:2)

if ( (projectgrade <0) || (projectgrade > 100) || (midtermgrade <0) || (midtermgrade > 100) || (finalexamgrade < 0) || (finalexamgrade > 100))
{
    cout<<endl<<"invalid data, please retry again.";
    cin.ignore();
    cin.get();
    return EXIT_SUCCESS;
}

答案 2 :(得分:0)

在C ++ 11中,你可以写:

auto failure = [](){
    cout << "invalid data, please try again" << endl;
    cin.ignore();
    cin.get();
    return 0;
};

然后在发生故障时使用它:

if ( !(100 >= projectgrade && 0<= projectgrade) )
   return failure();

// do more stuff

if ( !(100 >= midtermgrade && 0<= midtermgrade) )
    return failure();

注意,在您的文字之后而不是在之前做endl之前; return 0;始终表示成功,而cin.ignore()只会忽略单个字符(通常,您可能希望忽略该行的其余部分)。

答案 3 :(得分:0)

首先,您可以为测试添加一个功能

bool is_valid_grade(int grade)
{
    return 0 <= grade && grade <= 100;
}

bool is_valid_grade(unsigned int grade)
{
    return grade <= 100; // unsigned cannot be negative
}

然后使用它:

if (is_valid_grade(projectgrade)
    && is_valid_grade(midtermgrade)
    && is_valid_grade(finalexamgrade))
{
    // Valid code
}
else
{
    return failure(); // your previous code into a function
}