-8
# include <stdio.h>

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

When a becomes 0 then if condition will not execute then why the output is going to be infinty in this code means

output -

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

3 回答 3

3

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

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

a--;
goto begin;

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

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

return 0;

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

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

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

return 0;

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

于 2013-07-13T19:32:03.763 回答
1

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

这样看:-

该声明

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

仅在条件 inif为真时执行。此处的 TRUE 指的是不等于0so 的任何值,当isprintf时不执行,而对任何其他值执行。现在, 并且在外部执行,因此它们一次又一次地执行,使条件始终为真,并且无限打印负值。a0a--gotoifif

尽管如此,

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

于 2013-07-13T19:21:48.280 回答
0
if a==1 -> Evaluates to TRUE
if a==0 -> Evaluates to FALSE
if a==-1 -> Evaluates to TRUE

等等

因此它将按降序显示数字,但不显示 0 除外。

于 2013-07-13T19:35:21.140 回答