回答错误答案

时间:2011-11-12 16:46:08

标签: c

当我运行此代码时,它会迭代,但随后返回“答案为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;


}

5 个答案:

答案 0 :(得分:8)

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

循环内的i与循环外的i不同。

重申:

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

答案 1 :(得分:5)

您的代码中有两个单独的i,内部隐藏了外部的i。此外,print语句会导致未定义的行为,因为外部for (i = 0; i < 12; i++)是未初始化的。

说{{1}}使用外部变量而不是声明一个新变量。

答案 2 :(得分:1)

您实际上是在i循环内再次声明for。像你这样循环:

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

然后,一旦退出循环,它将保留其值。

答案 3 :(得分:0)

您的代码中有两个单独的int i声明。

答案 4 :(得分:0)

如果你想在for循环之外使用i,不要在for循环中声明它

所以你的for循环应该像

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