2011-10-31 120 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 = ...)”