如何替换“突破”?

时间:2020-06-19 17:29:19

标签: c++ switch-statement break

在我的程序中,我的结构类似于以下内容:

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验证的程序执行某些操作。

2 个答案:

答案 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:如果我需要在其中添加新条件,则不必从根本上更改源代码 。别管它。您从教授或其他任何人那里得到的任何信息都是指南!

“清晰” 始终是关键,因为随着时间的流逝,您的源代码将被许多其他人添加。我喜欢原始的习惯用法,因为每种情况都明显不同:“先进行测试,然后再进行纾困”。 (根据情况可能是breakreturn。)很容易看出逻辑的去向,并且“以相同的方式”向其中添加另一个大小写也很容易。

最后–“对数字计算机绝对没有影响。” (正如Perl程序员喜欢说的那样,“ “有多种方法可以做到。™”。)但是,这可能对您的 [future ...] 同事很有吸引力。这里没有绝对值。只是想对他们好一点。要“愚蠢”。