在我的程序中,我的结构类似于以下内容:
while (true) {
int c;
cout << "Type a command: ";
cin >> command;
switch (c) {
case 1:
// [...]
if (!condition) break;
// [...]
if (!condition2) break;
// [...]
if (!condition3) break;
// [...]
break;
case 2:
// [...]
break;
default:
break;
}
}
但是我们的教授告诉我们不要使用break
,除非在切换情况下退出...我想知道是否有更好,更聪明的方法来替换块if(!condition) break;
。
我的主要目标是防止未经condition
验证的程序执行某些操作。
答案 0 :(得分:1)
为了避免break
,您需要使用相反的条件,并且不要破坏流程,而要对其进行控制:
switch (c) {
case 1:
// [...]
if (condition) {
// [...]
if (condition2) {
// [...]
if (condition3) {
// [...]
} // if the third condition is false, you will continue to the break.
} // if the second condition is false, you will continue to the break.
} // if the first condition is false, you will continue to the break.
break;
// ...
}
为避免复杂情况,可以使用以下功能:
void condition_1_actions();
void condition_2_actions();
void condition_3_actions();
// ... main ...
case 1:
if (condition) condition_1_actions();
break;
// ... After main ...
condition_1_actions() {
// do some actions
// Calculate condition2 or pass it as parameter
if (condition2) condition_2_actions();
}
condition_2_actions() {
// do some actions
// Calculate condition3 or pass it as parameter
if (condition3) condition_3_actions();
}
condition_3_actions() {
// do some actions
}
答案 1 :(得分:0)
我确定“您的教授”会同意:“如果没有破裂,请不要修复它。”
编写的逻辑是清楚的,我认为它是有效的。另外,编写的逻辑是 maintainable:如果我需要在其中添加新条件,则不必从根本上更改源代码 。别管它。您从教授或其他任何人那里得到的任何信息都是指南!
“清晰” 始终是关键,因为随着时间的流逝,您的源代码将被许多其他人添加。我喜欢原始的习惯用法,因为每种情况都明显不同:“先进行测试,然后再进行纾困”。 (根据情况可能是break
或return
。)很容易看出逻辑的去向,并且“以相同的方式”向其中添加另一个大小写也很容易。
最后–“对数字计算机绝对没有影响。” (正如Perl程序员喜欢说的那样,“ “有多种方法可以做到。™”。)但是,这可能对您的 [future ...] 同事很有吸引力。这里没有绝对值。只是想对他们好一点。要“愚蠢”。