2011-10-31 83 views
0

我正在運行這個C程序,而不是回答「答案是10」,它會發回消息:「答案是0」,即使它在正確的時間中斷。C語言中斷的邏輯錯誤

你能告訴我什麼是錯的嗎?


#import <Foundation/Foundation.h> 

int main (int argc, const char * argv[]) 
{ 
    int i; 
    for(int i = 0; i < 12; i++){ 
     printf("Checking i = %d\n", i); 
     if(i + 90 == i * i) { 
      break; 
     } 
    } 
    printf("The answer is %d.\n", i); 
} 

回答

2

問題是你有兩個i's。

int main (int argc, const char * argv[]) 
{ 
    int i; //Declares outer i 
    for(int i = 0; i < 12; i++) //Declares a NEW i 
    { 
     printf("Checking i = %d\n", i); 
     if(i + 90 == i * i) 
     { 
      break; 
     } 
    } 
    printf("The answer is %d.\n", i); //Uses the outer i 
} 
1

基本範圍的混亂:你有兩個不同的變量稱爲i:一是在main函數體的外部範圍,另外,覆蓋一個for循環中。

外部變量未初始化,所以實際上你有未定義的行爲。

你的意思是說的是:

int i; 
for (i = 0; i < 12; i++) 
/* ^^^^^     use existing variable! */ 
{ 
    printf("Checking i = %d\n", i); 
    if (i + 90 == i * i) 
    { 
    break; 
    } 
} 
0

難道是額外的 「INT」?你在for循環中聲明瞭另一個「i」的實例,當循環結束時,它將超出範圍。

0
for(int i = 0; i < 12; i++){ 

你正在創建另一i這裏,隱藏ifor循環的範圍之內。

更改爲:

int i; 
... 
for (i = 0; i < 12; i++){ 
0

因爲你必須有兩個不同變量「我」 - 一個在內部範圍(你從0..11遞增),和一個在外部範圍。您在外部範圍中打印一個。

SOLUTION:

變化 「爲(INT I = ...)」 到 「爲(i = ...)」