gpt4 book ai didi

c - 第一种情况整数的奇怪输出

转载 作者:行者123 更新时间:2023-11-30 14:20:10 26 4
gpt4 key购买 nike

下面是两个可以完美编译的函数,但我似乎在第一个输入的整数时遇到了一个奇怪的错误。我尝试过在 GDB 中进行调试,但是当只有第一个输入的值出现这个奇怪的错误时,事情就会变得复杂。

#include <stdio.h>
#include "Assg9.h"
#include <stdlib.h>
#include <assert.h>
#include <math.h>

void getPrimes(int usernum, int* count, int** array){
(*count) = (usernum - 1);
int sieve[usernum-1], primenums = 0, index, fillnum, multiple;

for(index = 0, fillnum = 2; fillnum <= usernum; index++, fillnum++){
sieve[index] = fillnum;
}

for (; primenums < sqrt(usernum); primenums++)
{
if (sieve[primenums] != 0){
for (multiple = primenums + (sieve[primenums]); multiple < usernum - 1; multiple += sieve[primenums])//If it is not crossed out it starts deleting its multiples.
{
if(sieve[multiple]) {
--(*count);
sieve[multiple] = 0;
}
}
}
}
int k;

for (k = 0; k < usernum; k++)
if (sieve[k] != 0)
{
printf("%d ", sieve[k]);
}
*array = malloc(sizeof(int) * (usernum +1));
assert(array);
(*array) = sieve;
}



void writeToOutputFile(FILE *fpout, const int *array, int n, int count){
int i;
fprintf(fpout, "There are %d prime numbers less than or equal to %d \n", count, n);
for(i = 0; i < count; i++)
{
if(*(array + i) != 0){
fprintf(fpout, "%d ", *(array + i));

}

}
}

我们的输出:

Please enter an integer in the range 2 <-> 2000 both inclusive: 2
2 32664
Do you want to try again? Press Y for Yes and N for No: y
Please enter an integer in the range 2 <-> 2000 both inclusive: 2
2
Do you want to try again? Press Y for Yes and N for No: n
Good bye. Have a nice day

预期输出显然应该只显示 2。对于第一个输入的整数,从 2 到 2000 的任何整数都是这种情况。最后一个或最后 2 个质数打印出非常大的数字,有时甚至是负数。我不知道为什么,但在第一个输入值之后,一切都运行良好。尝试用 GDB 疯狂地调试它,但没有成功。非常感谢有人帮助解决这个奇怪的错误

最佳答案

您没有将筛子数组初始化为 0。因此,您从 0 循环到 usernum-1,打印出所有非 0 的数字。由于您没有初始化数组,因此第二个元素是一个随机值,并且正在打印出来

关于c - 第一种情况整数的奇怪输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15714765/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com