使用 "else if" 是否消除了在 while 循环中的每个条件后休息的需要?

Does using "else if" eliminate the need for breaks after each condition in a while loop?

本文关键字:条件 循环 是否 if else 使用 while      更新时间:2023-10-16

使用"else-if"是否消除了while循环中每个条件后的中断?当输入了一个正确的输入时,我想退出循环。

我的代码的第一个版本看起来像这个

string s;
string str;
while (true) {
        cin >> s;
        if (s == "a") {
             str = "Apple";
             break;
        }
        if (s == "b") {
             str = "Banana";
             break;
        }
        ... more ifs ...
        else {
            cout << "Did not recognize input." << endl;
            continue;
        }
    }

我可以将其更改为下面的代码而不产生负面后果吗?它更短,对我来说更好看。

string s;
string str;
while (true) {
        cin >> s;
        if (s == "a") str = "Apple";
        else if (s == "b") str = "Banana";
        else if (s == "c") str = "Cat";
        ... more else-ifs ...
        else {
            cout << "Did not recognize input." << endl;
            continue;
        }
        break;
    }

是的,可以。else if链确保只有else的情况continue触发循环,而不命中else的情况触发break

可以。

提示:如果你想确定重构是否有效,你可以写一个测试来检查代码是否正确。

代码做同样的事情,关于执行时间没有区别,所以它们是相似的。不过,您不需要第一个代码片段中的最后一个break。然而,如果你想为你的案例设计一个好的样式,你应该考虑switch语句。

while(true){
   char c;
   cin >>c;
   switch (c) {
     case 'A': 
        // deal with char A
        break;
     case 'b':
        // deal with char b
        break;
     default:
        continue;
   }
     break;
}

对于带字符串的switch语句,您可以检查以下内容:在C++中评估带开关的字符串

我发现switch语句更优雅。