# 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 :(得分:3)
如果程序确实为您打印0
,那么您的编译器(甚至是您的机器......)可能会出现严重问题。我怀疑它不打印0
,但你的问题是程序无限循环的原因。
这是因为if
- 主体仅包含print语句。因此,当a
达到0时,它不会被打印,而是行
a--;
goto begin;
仍在执行中。机器将遵守,返回begin
并继续循环。最快的解决方法是在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
- 身体周围的大括号在这里甚至不是必需的,但只是好习惯)
答案 1 :(得分:1)
这是因为在if
再次执行goto
语句之后,a
的值已经变为0
以外的其他值。现在,您再次获得goto
语句,因此if
继续执行并打印负值。
这样看: -
声明
仅当
printf("%d\n",a);
if
中的条件为真时才执行。这里的TRUE指的是不等于0
的任何内容,因此,当printf
为a
时,0
不执行,而对任何其他值执行a--
。现在,goto
和if
在if
之外执行,因此它们会一次又一次地执行,使goto
中的条件始终为true,并且无限地打印负值。
然而,
我的问题是,你为什么要使用{{1}}?
答案 2 :(得分:0)
if a==1 -> Evaluates to TRUE
if a==0 -> Evaluates to FALSE
if a==-1 -> Evaluates to TRUE
等
因此它将按降序显示数字,但0不会显示。