C 数组的奇怪行为
这是我的代码,它在运行时不起作用(在java中可以正常工作) 但是如果我改变路线C 数组的奇怪行为,c,arrays,primes,C,Arrays,Primes,这是我的代码,它在运行时不起作用(在java中可以正常工作) 但是如果我改变路线 primeNumber[size] = counter; 为了 程序在运行时不会崩溃。有人知道为什么C不接受这个命令primeNumber[size]=counter 谢谢大家! #include <stdio.h> int main(void){ int primeNumber[90]; primeNumber[0] = 2; //start with 2 int size = 1; int d
primeNumber[size] = 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;
}
#包括
内部主(空){
整数素数[90];
素数[0]=2;//以2开头
int size=1;
整除=0;
int i=0;
int计数器=3;
而(counter这只是一个off by one错误。下面的代码中对相关点进行了注释
#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;
}
您在初始值为size
的for
循环中有一个错误。由于您使用i大小值增长到98,而数组大小为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;
}
#包括
内部主(空){
int primeNumber[100];//将大小增加到100
素数[0]=2;//以2开头
int size=1;
整除=0;
int i=0;
int计数器=3;
while(反奇怪行为->未定义行为,很可能…在使用数组的各种索引之前,您没有初始化数组primeNumber
。在while
循环的第一次迭代中,在for
循环的第二次迭代中,primeNumber[1]
未初始化。大多数迭代都会发生这种情况,正如iharob所说,调用未定义的行为。size
的最大值会变成什么?想想如果它等于或大于90
会发生什么。另外,既然您使用了我使用了调试器吗?设置断点?检查变量?
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
#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;
}