【问题标题】:using goto keyword in C [closed]在C中使用goto关键字[关闭]
【发布时间】:2013-07-12 02:06:13
【问题描述】:
# include <stdio.h>

int main()
{
  int a=5;
  begin:
  if(a)
       printf("%d\n",a);
   a--;
   goto begin;
   return 0;
 }

当 a 变为 0 时,如果条件不会执行,那么为什么此代码中的输出将是无穷大的意思是

输出 -

 5
 4
 3
 2
 1
 0
-1
-2
and so on endless

【问题讨论】:

  • 你的问题到底是什么?
  • 我不认为您在编译时复制了代码完全
  • 代码按预期工作。不像输出中那样打印 0。
  • ...它与“使用 goto 关键字”没有真正的关系
  • @AmanSingh 那么这里没有真正的问题

标签: c goto


【解决方案1】:

如果程序确实为您打印了0,那么您的编译器(甚至您的机器......)可能存在严重问题。我的怀疑是它不打印0,但你的问题是为什么程序无限循环。

这是因为if-body 只包含打印语句。因此,当a 达到 0 时,它不会被打印,而是行

a--;
goto begin;

仍在执行。机器将服从,返回begin 并继续循环。最快的解决方法是在 all 你想要在a != 0 时执行的语句周围加上大括号:

if(a){
    printf("%d\n",a);
    a--;
    goto begin;
}

return 0;

这将使程序只循环直到a为0,然后返回。

但真正的问题是:不要使用goto(为此)!这是使用while loop 的完美情况:

while(a--){
    printf("%d\n", a);
}

return 0;

while-body 周围的大括号在这里甚至不是绝对必要的,但只是很好的做法)

【讨论】:

  • 你的意思是while(a--)
  • 这确实更有意义
【解决方案2】:

这是因为if 之后goto 语句再次执行,然后a 的值已经变成了0 以外的值。现在,您再次获得goto 语句,因此if 继续执行并打印负值。

这样看:-

声明

printf("%d\n",a);

仅在if 中的条件为真时执行。这里的 TRUE 指的是不等于 0 的任何值,因此,当 a0 时,printf 不会执行,而对于任何其他值都会执行。现在,a--gotoif 之外执行,因此它们一次又一次地执行,使 if 中的条件始终为真,并且无限打印负值。

尽管如此,

我的问题是,你为什么使用goto

【讨论】:

  • 只是检查它的工作,就是这样,实际上我正在学习C,谢谢大家的帮助
  • @AmanSingh 请记住,除非您有充分的理由,否则不应使用 goto。 (如果你刚开始学习 C,你可能没有很好的理由。)
  • @AmanSingh 其非常古老的风格几乎已经过时。无论如何:)
  • 哦,加油!!我还没有说它会打印 0 为什么我的答案被否决。请自行解释。
  • 说真的,即使没有正确查看我的答案,投票的速度也很快。找不到我写它的地方和时间打印 0。刚刚逃脱了中风 LOL :D 。尽管在输出 OP 中写了 0 明确指出 if 不会执行。
【解决方案3】:
if a==1 -> Evaluates to TRUE
if a==0 -> Evaluates to FALSE
if a==-1 -> Evaluates to TRUE

等等

因此它会按降序显示数字,除了 0 不会显示。

【讨论】:

    猜你喜欢
    • 2014-03-30
    • 2016-06-05
    • 2021-08-29
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 2016-09-19
    • 1970-01-01
    • 2011-07-02
    相关资源
    最近更新 更多