数组的奇怪行为

strange behavior with array

这是我的代码,它在 运行 时间内不起作用(在 java 内工作正常)。

但是如果我换行

primeNumber[size] = counter;

primeNumber[i] = counter;

程序不会在 运行 时间内崩溃。有人知道为什么 C 不接受那个命令 primeNumber[size] = counter;

谢谢!

#include <stdio.h>

int main(void){

int primeNumber[90];
primeNumber[0] = 2; //start with 2
int size = 1;
int divisible = 0;
int i = 0;
int counter = 3;


while(counter <= 100){
    divisible = 0;

    for(i = 0; i <= size; i++){
            if(counter%primeNumber[i] == 0){ 
                divisible++;
                break;      
            }
    }

    if(divisible == 0){ 
        primeNumber[size] = counter;
        size = size + 1;
    }       

    counter++;
}

for(i = 0; i <= size; i++){
    printf("\n prime: %d", primeNumber[i]);
}


return 0;
}   

这只是一个差一错误。相关点在下面的代码中注释。

#include <stdio.h>

int main(void){

int primeNumber[90];
primeNumber[0] = 2; //start with 2
int size = 1;
int divisible = 0;
int i = 0;
int counter = 3;


while(counter <= 100){
    divisible = 0;

    for(i = 0; i < size; i++){ // Was error here
            if(counter%primeNumber[i] == 0){ 
                divisible++;
                break;      
            }
    }

    if(divisible == 0){ 
        primeNumber[size] = counter;
        size = size + 1;
    }       

    counter++;
}

for(i = 0; i < size; i++){ // Was error here
    printf("\n prime: %d", primeNumber[i]);
}


return 0;
}  

打印:

 prime: 2
 prime: 3
 prime: 5
 prime: 7
 prime: 11
 prime: 13
 prime: 17
 prime: 19
 prime: 23
 prime: 29
 prime: 31
 prime: 37
 prime: 41
 prime: 43
 prime: 47
 prime: 53
 prime: 59
 prime: 61
 prime: 67
 prime: 71
 prime: 73
 prime: 79
 prime: 83
 prime: 89
 prime: 97

您在初始值为 sizefor 循环中出错。由于您使用 i <= size,因此 i 在第二次迭代期间达到 1,并且 primeNumber[1] 未初始化。请改用 i < size

你在最后一个 for 中有同样的问题(使用 printf),因为你在 primeNumber 中更改值后增加 sizeprimeNumber[size] 不会'尚未初始化。

注意:由于这个错误,您的代码应该只是有异常行为,而不是崩溃。

size 的值增长到 98,而 array 的大小是 90,所以将大小增加到 100,它会解决你的问题。

#include <stdio.h>

int main(void){

int primeNumber[100]; //increased size to 100
primeNumber[0] = 2; //start with 2
int size = 1;
int divisible = 0;
int i = 0;
int counter = 3;


while(counter <= 100){
    divisible = 0;
    //replaced <= with < to avoid floating     point exception
    for(i = 0; i < size; i++){ 
            if(counter % primeNumber[i] == 0){
                divisible++;
                break;
            }
    }

    if(divisible == 0){
        primeNumber[size] = counter;
        size = size + 1;
    }

    counter++;
}

for(i = 0; i <= size; i++){
    printf("\n prime: %d", primeNumber[i]);
}
return 0;
}