For循环未按预期工作

时间:2018-08-16 18:42:25

标签: c for-loop

当我运行这段代码时,printf()函数似乎提供了一个随机的大数字,就好像它正在调用一个超出范围的数组一样。这是怎么回事?

#include <stdio.h>
#include <math.h>

int main(void) 
{
    int test_num = 1000;
    int factors[16];

    for(int i = 1, j = 0; i < test_num; i++, j++) {
        if(test_num % i == 0)
            factors[j] = i;
    }

    printf("%d", factors[2]);

    return 0;
}

3 个答案:

答案 0 :(得分:3)

最有可能的问题是,即使您没有分配j,您也正在递增i

获得的因子顺序是1、2、4、5、8、10...。您可能希望将这些因子分配给索引0-5(含),而不是0、1、3、4。 7、9等

如下更改循环:

for(int i = 1, j = 0; i < test_num && j < 16; i++) {
    if(test_num % i == 0) {
        factors[j] = i;
        j++;
    }
}

要点仅是在j符合您的条件时递增i。您还想确保您不会超出范围(&& j < 16)。

答案 1 :(得分:0)

如果在循环中打印出jj,请注意factors[2]永远不会是2。

因此,MariaDB [(none)]> SELECT GET_LOCK('lock1', 10); +-----------------------+ | GET_LOCK('lock1', 10) | +-----------------------+ | 1 | +-----------------------+ 1 row in set (0.000 sec) 从未被初始化,因此您将打印出垃圾邮件。

答案 2 :(得分:0)

j == 2i == 31000 % 3不等于0时,它等于1。未通过您的if语句条件。因此factors[2]将是未定义的(因为您没有初始化数组)。因此数量众多。