在 C 语言中将“continue”与基于布尔值的语句一起使用

Using 'continue' with boolean-based statements in C

提问人:Idan 提问时间:11/23/2019 最后编辑:Idan 更新时间:11/24/2019 访问量:434

问:

对于那些不明白的人 - 我知道这不是一个好的代码应该是什么样子......这个棘手问题的目的是编写一个没有 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 语句的情况下执行吗?

谢谢!!

c if 语句 布尔逻辑

评论

0赞 Tajinder Singh 11/23/2019
我没有完全理解它,但似乎你正在寻找三元运算符 guide.freecodecamp.org/c/ternary-operator
1赞 0___________ 11/23/2019
任何反对的理由。if
1赞 Alberto 11/23/2019
a!=b && function() <- 和 //code?
0赞 Idan 11/24/2019
@AlbertoSinigaglia 可能有效!唯一的问题是,原始的 while 循环有一些行无法在每次 while 循环重置时调用的函数中执行。(计数器、求和和其他参数,这些参数在很大程度上依赖于 while 循环条件)
0赞 dash-o 11/24/2019
在我的本科学习中(多年前),我记得听过一个讲座,其中解释说,除了 goto 之外,所有控制流命令(if、for、while、do {} while、switch)都可以使用 while 来实现。我希望我能找到参考/证明。这是关于代码验证的讲座的一部分。

答:

-1赞 0___________ 11/23/2019 #1
if (1 > 0)
   printf("TRUE")
else
   printf("FALSE")

我会使用:

bool res = true;
res = (1 > 0 && printf("TRUE")) || printf("FALSE")

如果我看到团队中的任何程序员编写这样的代码,我都会解雇他/她。

为什么?您的版本不是人类可读的,它容易出错,几乎不可调试。

评论

1赞 rifkin 11/23/2019
他要求一个基于布尔值的表达式解决方案,而不是“我如何在下一个基于团队的编码工作中做到这一点”。
0赞 KamilCuk 11/23/2019 #2

您知道是否可以在不使用 if/else/switch 语句的情况下执行吗?

使用 gcc 扩展语句表达式,您可以执行以下操作:

int main() {
    int A, B;
    while (1) {
        A == B && ({continue;0;});
    }
}

请不要这样做,请不要这样做。只需写 s。res = (1 > 0 && printf("TRUE")) || printf("FALSE")if

评论

0赞 Idan 11/24/2019
这是标准的 C 语法吗?im 使用 c99 并且这不会编译
0赞 KamilCuk 11/24/2019
不,不是,它是 gcc 扩展。
0赞 Jens 11/24/2019 #3

相当于你的

while (condition)
{
   foo();
   if (A == B)
       continue;
   bar();
   baz();
}

while (condition)
{
   foo();
   (A != B) && bar();
   (A != B) && baz();
}

这假定 .如果是这样,请使用临时变量:bar()AB

while (condition)
{
   foo();
   bool cond = A != B;
   cond && bar();
   cond && baz();
}
0赞 dash-o 11/24/2019 #4

假设 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