提问人:Idan 提问时间:11/23/2019 最后编辑:Idan 更新时间:11/24/2019 访问量:434
在 C 语言中将“continue”与基于布尔值的语句一起使用
Using 'continue' with boolean-based statements in C
问:
对于那些不明白的人 - 我知道这不是一个好的代码应该是什么样子......这个棘手问题的目的是编写一个没有 if 语句的代码,以便练习布尔逻辑......
我正在尝试用 C 语言解决一个问题,该问题限制程序员使用 if/else/switch 语句。也不能使用三元运算符。这个想法是使用基于布尔值的逻辑语句来获取“想要的路径”。 即 - 而不是:
if (1 > 0)
printf("TRUE")
else
printf("FALSE")
我会使用:
bool res = true;
res = (1 > 0 && printf("TRUE")) || printf("FALSE")
(这是一般的想法,使用布尔语句处理逻辑来操作不同的动作。 我遇到的唯一问题是替换一个看起来有点像这样的部分(如果 A 等于 B,我希望程序跳过循环的某个部分):
while (...)
{
if (A == B)
continue;
//code
}
您知道是否可以在不使用 if/else/switch 语句的情况下执行吗?
谢谢!!
答:
if (1 > 0) printf("TRUE") else printf("FALSE")
我会使用:
bool res = true; res = (1 > 0 && printf("TRUE")) || printf("FALSE")
如果我看到团队中的任何程序员编写这样的代码,我都会解雇他/她。
为什么?您的版本不是人类可读的,它容易出错,几乎不可调试。
评论
您知道是否可以在不使用 if/else/switch 语句的情况下执行吗?
使用 gcc 扩展语句表达式,您可以执行以下操作:
int main() {
int A, B;
while (1) {
A == B && ({continue;0;});
}
}
请不要这样做,请不要这样做。只需写 s。res = (1 > 0 && printf("TRUE")) || printf("FALSE")
if
评论
相当于你的
while (condition)
{
foo();
if (A == B)
continue;
bar();
baz();
}
是
while (condition)
{
foo();
(A != B) && bar();
(A != B) && baz();
}
这假定 .如果是这样,请使用临时变量:bar()
A
B
while (condition)
{
foo();
bool cond = A != B;
cond && bar();
cond && baz();
}
假设 OK 使用变量,那么state
while (...)
{
if (A == B)
continue;
//code
}
可以作为
state = true ;
while ( ... ) {
...
while ( a == b ) {
state = false ;
break ;
} ;
while ( !state ) {
// code here
break ;
} ;
}
或者减少混乱,如果允许:
while (...)
{
state = A == B ;
while ( state ) {
//code here
break ;
} ;
}
由于必须进行双重测试,性能损失相对较小。
旁注:在我的本科学习中(多年前),我记得听过一个讲座,其中解释说所有控制流命令(if、while、do {} while、switch,goto 除外)都可以使用 .我希望我能找到参考/证明。这是关于代码验证的讲座的一部分。while
评论
if