gpt4 book ai didi

c - C 中的指针,使用数组获得意外结果

转载 作者:太空宇宙 更新时间:2023-11-04 01:47:23 24 4
gpt4 key购买 nike

我想计算几个数字的阶乘,并以数组的形式返回结果。这是我的程序:

#include <stdio.h>
#include <stdlib.h>

int *fact(int arr[], int n) {
int *facts, fac = 1, i, j;

facts = (int *) malloc(n * sizeof(int));

for (i = 0; i < n; i++) {
for (j = 1; j <= *(arr + i); j++)
fac = fac * j;

*(facts + i) = fac;
}

return facts;
}

int main(void) {
int *num, *facto, n, i; //Initializing variables.

printf("How many numbers to calculate factorial for :\t");
scanf("%d", &n);

num = (int*) malloc(n * sizeof(int)); //Dynamic allocation for array num.

printf("Enter the elements separated by spaces :\t");

for (i = 0; i < n; i++)
scanf("%d", num + i);

facto = fact(num, n);

printf("\nFactorials are :\t");

for (i = 0; i < n; i++)
printf("%d\t", *(facto + i));

printf("\n");

return 0;
}

然而,当它打印返回数组的元素时,只有第一个值是正确的。其他的似乎是随机的。

这个程序有什么问题,我该如何解决?

最佳答案

j 上的每个 for 循环之前,您需要将 fac 重置为 1,否则在除第一个之外的每个计算中,第一个因素将不会从 1 开始:

for(i=0; i<n; i++) {   
fac = 1; // HERE
for(j=1; j<= *(arr+i); j++) {
fac = fac*j;
}
*(facts+i) = fac;
}

关于c - C 中的指针,使用数组获得意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51083790/

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