我希望第一个else
有if
条指令。像这样:
if (vowels_counter >= consonants_counter)
for (i = 0; ntca[i]; i++)
for (j = 0; vowels[j]; j++)
if (ntca[i] == vowels[j])
{ ntca[i] += 1;
break;
}
else
for (i = 0; ntca[i]; i++)...
但您看到else
如何与第二个if
:
if (vowels_counter >= consonants_counter)
for (i = 0; ntca[i]; i++)
for (j = 0; vowels[j]; j++)
if (ntca[i] == vowels[j])
{ ntca[i] += 1;
break;
}
else
for (i = 0; ntca[i]; i++)...
我通过将嵌套的if
和for
放在这样的大括号中解决了这种情况:
if (vowels_counter >= consonants_counter)
for (i = 0; ntca[i]; i++)
{for (j = 0; vowels[j]; j++)
{if (ntca[i] == vowels[j])
{ntca[i] += 1;
break;
}
}
}
else
for (i = 0; ntca[i]; i++)...
这是最优雅/安全/推荐的解决方案吗?谢谢!
答案 0 :(得分:6)
在没有使用大括号的情况下是否有其他解决方案?
这是错误的问题。真正的问题是:有没有理由不使用大括号?没有。只需使用大括号。你的同事和未来 - 你将在以后感谢你。
答案 1 :(得分:4)
您要做的不是那么简单:else
绑定到最近的待定if
语句。您需要至少在其中一个for
语句的主体周围放置大括号,或者更糟糕的是,在嵌套的else;
中添加一个空的if
子句。
但这是 NOT 你应该做的事情!
请记住,对于if
,for
,while
,do
等不限制的语句,不使用大括号被视为不良风格单行。它容易出错且不太可读。慷慨地使用大括号,让不太精明(或不那么清醒)的程序员可以保护你的代码免受以后更改的影响。
Classic Kernighan和Ritchie风格如下所示:
if (vowels_counter >= consonants_counter) {
for (i = 0; ntca[i]; i++) {
for (j = 0; vowels[j]; j++) {
if (ntca[i] == vowels[j]) {
ntca[i] += 1;
break;
}
}
}
} else {
for (i = 0; ntca[i]; i++) {
...
}
}
答案 2 :(得分:1)
我在if
语句的主体周围使用大括号,这是最简单,最易读的选项:
if (vowels_counter >= consonants_counter)
{
for (...
}
else
{
for (...
}
但只是为了好玩:
if (vowels_counter >= consonants_counter)
for (i = 0; ntca[i]; i++)
{
for (j = 0; vowels[j] && ntca[i] != vowels[j]; j++)
;
ntca[i] += (vowels[j] && ntca[i] == vowels[j]);
}
else
for (i = 0; ntca[i]; i++) // ...
答案 3 :(得分:-2)
显而易见的方法是添加另一个else
,然后添加一个空语句(即紧接着;
)
if (vowels_counter >= consonants_counter)
for (i = 0; ntca[i]; i++)
for (j = 0; vowels[j]; j++)
if (ntca[i] == vowels[j])
{ ntca[i] += 1;
break;
}
else ; // note presence of ; here
else
for (i = 0; ntca[i]; i++)
然而,虽然它回答了问题,但这不是我推荐的技术。有很多方法可以让这些黑客混淆程序员 - 包括将来自己 - 这根本不值得。易于误解的代码很容易出错。
养成将if
,for
,else
等的身体放在花括号中的习惯,除非你有一个非常具体和令人信服的(对其他人)理由不至。在大多数风格指南中强烈建议这样的事情是有充分理由的。请记住,缩进不会以任何方式改变代码的含义。
答案 4 :(得分:-4)
一种解决方案是否定内部if
的条件并将过程置于else
闭合。
if (vowels_counter >= consonants_counter)
for (i = 0; ntca[i]; i++)
for (j = 0; vowels[j]; j++)
if (!(ntca[i] == vowels[j])); else
{ ntca[i] += 1;
break;
}
else
for (i = 0; ntca[i]; i++)...