前言
原因在于我刷LeetCode题目时,我使用了多层if来判断。但是出现了一个错误
描述
把问题进行 抽象,看下面代码 ,你觉得会输出什么?
int test(string s)
{
if (s == "A") cout << "A" << endl;
if (s == "B") cout << "B" << endl;
if (s == "C") cout << "C" << endl;
else cout << "D" << endl;
return 0;
}
void main()
{
string s = "A";
test(s);
getchar();
}
“投票在下面”
如果你觉得会输出“A” 那你就和我犯了一样的“阅读”错误。
如果你这么写代码,最后输出结果是“A\nD”
因为 “else”会和离他最近的“if”组成一个整体。即前面两个if单独执行,第三个if和“else”单独进行“二选一”的是非判断
所以如果这题改变输入:情况会是这样
输入 A 输出 A \n D
输入 B 输出 B \n D
输入 C 输出 C
输入 E or F or ~~ 输出 D
正确操作
如果我的本意是对输入进行判断,即把多个判定条件作为整体,要用“else if”
int test(string s)
{
if (s == "A") cout << "A" << endl;
else if (s == "B") cout << "B" << endl;
else if (s == "C") cout << "C" << endl;
else cout << "D" << endl;
return 0;
}
输入 A 输出 A
输入 B 输出 B
输入 C 输出 C
输入 E or F or ~~ 输出 D
看起来很简单 但是重复使用if语句真的是个坏习惯,在实际应用中直接把我干懵