您好,我正在学习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求助!
答案 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
}