2011-11-12 210 views
1

當我運行這段代碼時,它會迭代,但當它返回「答案爲0」時,它應該是「答案是10」。回答出錯的答案

這是爲什麼?

#import <Foundation/Foundation.h> 

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


} 
+2

'#import'? – Vlad

回答

5

你在你的代碼有兩個單獨的i S,內部一個隱藏在外之一。此外,print語句導致未定義的行爲,因爲外部i被讀取爲未初始化。

for (i = 0; i < 12; i++)使用外部變量而不是聲明新變量。

+0

提及未初始化變量+1 UB – Vlad

+0

工作。謝謝你的解釋! – pdenlinger

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

i的循環內是不一樣的i外循環。

Repace與:

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

您實際上在for循環內再次聲明i。讓你的for循環,像這樣:

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

然後,一旦你退出循環將保留其價值。

0

在您的代碼中有兩個單獨的聲明int i

0

如果你想使用我之外for循環,不內聲明它循環

所以,你的for循環應該是像在C

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