# include <stdio.h>
int main()
{
int a=5;
begin:
if(a)
printf("%d\n",a);
a--;
goto begin;
return 0;
}
當變爲0,然後如果爲什麼輸出將是在此代碼infinty條件將不執行則意味着使用轉到關鍵字用C
輸出 -
5
4
3
2
1
0
-1
-2
and so on endless
# include <stdio.h>
int main()
{
int a=5;
begin:
if(a)
printf("%d\n",a);
a--;
goto begin;
return 0;
}
當變爲0,然後如果爲什麼輸出將是在此代碼infinty條件將不執行則意味着使用轉到關鍵字用C
輸出 -
5
4
3
2
1
0
-1
-2
and so on endless
如果程序確實爲您打印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
loop一個完美的情況:(圍繞while
體區甚至不是絕對必要在這裏,只是很好的做法大括號)
你是不是指'while(a - )'? –
這確實更有意義 – Kninnug
其因後if
goto
聲明再次執行,然後a
的值已經成爲除0
以外的值。現在,您再次獲得goto
聲明,因此if
繼續執行並打印負值。
看它是這樣的: -
聲明
printf("%d\n",a);
執行只有在if
條件爲真。這裏的真值是指任何不等於0
的值,所以當a
爲0
時,printf
不會被執行,而它執行任何其他值。現在,a--
和goto
在if
之外執行,因此它們被一次又一次地執行,使if
中的條件始終爲真,並且負值將無限打印。
儘管如此,
我的問題是,你爲什麼要使用goto
?
只是檢查它的工作,就是這樣,實際上我正在學習C並感謝大家的幫助 –
@AmanSingh請記住,除非你有一個很好的理由,你不應該使用goto。 (如果你剛剛開始學習C,那麼你可能沒有很好的理由。) – 2013-07-13 19:26:33
@AmanSingh它的舊風格幾乎已經過時了。無論如何:) – 0decimal0
if a==1 -> Evaluates to TRUE
if a==0 -> Evaluates to FALSE
if a==-1 -> Evaluates to TRUE
等
while(a--){
printf("%d\n", a);
}
return 0;
因此,它將按降序顯示數字,但不顯示0的數字除外。
你的問題到底是什麼? – Winks
爲什麼if條件正在執行,即使a變成了0 –
我不認爲你完全抄襲了你的代碼*。 –