2013-07-13 78 views
-8
# 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 
+3

你的問題到底是什麼? – Winks

+1

爲什麼if條件正在執行,即使a變成了0 –

+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 loop一個完美的情況:(圍繞while體區甚至不是絕對必要在這裏,只是很好的做法大括號)

+0

你是不是指'while(a - )'? –

+0

這確實更有意義 – Kninnug

1

其因後ifgoto聲明再次執行,然後a的值已經成爲除0以外的值。現在,您再次獲得goto聲明,因此if繼續執行並打印負值。

看它是這樣的: -

聲明

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

執行只有在if條件爲真。這裏的真值是指任何不等於0的值,所以當a0時,printf不會被執行,而它執行任何其他值。現在,a--gotoif之外執行,因此它們被一次又一次地執行,使if中的條件始終爲真,並且負值將無限打印。

儘管如此,

我的問題是,你爲什麼要使用goto

+0

只是檢查它的工作,就是這樣,實際上我正在學習C並感謝大家的幫助 –

+3

@AmanSingh請記住,除非你有一個很好的理由,你不應該使用goto。 (如果你剛剛開始學習C,那麼你可能沒有很好的理由。) – 2013-07-13 19:26:33

+0

@AmanSingh它的舊風格幾乎已經過時了。無論如何:) – 0decimal0

0
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的數字除外。