带有break的for语句中的C逻辑错误

时间:2011-10-31 18:47:45

标签: objective-c c xcode

我正在运行这个C程序,但它没有回答“答案是10”,而是发回消息:“答案是0”,即使它在正确的时间断开。

你能告诉我什么是错的吗?


#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);
}

5 个答案:

答案 0 :(得分:2)

问题是你有两个i

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 :(得分:1)

基本范围混淆:你有两个不同的变量i :一个在main函数体的外部范围内,另一个在for内覆盖一个变量1}}循环。

外部变量未初始化,因此实际上您有未定义的行为。

你的意思是:

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

答案 2 :(得分:0)

可能是额外的“int”吗?当循环退出时,你在for循环中声明另一个“i”实例超出范围。

答案 3 :(得分:0)

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

您在此处创建另一个 i,这会将i隐藏在for循环范围之外。

更改为:

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

答案 4 :(得分:0)

因为你有两个不同的变量“i” - 内部范围中的一个(从0..11递增),以及外部范围中的变量。您打印外部范围内的那个。

解决方案:

将“for(int i = ...)”更改为“for(i = ...)”