我的任务是计算一个数字的阶乘,保存到一个结构中,然后打印出来
以下是结构的代码:
结构事实\u条目
{/*每个表项的定义*/
int n;
long long int lli_fact;/*64位整数*/
char*stru_事实;
};
然后是下一个代码。我已经定义了一个长整型变量来计算阶乘,在结构的第一个元素中保存这个数字没有问题,print函数工作正常。问题在于char*str_事实;变量,我编写了一个代码,用sprintf将int值更改为char,但是在我将这个值分配给结构之后,在下一个for循环中,它只打印最后计算的元素。如果我试着在第一个周期内打印它,一切都正常,但在外部它只打印最后一个周期
int
main(int argc,char*argv[])
{
int n;
int i;
结构事实项*事实表;
如果(argc!=2)
恐慌(“参数错误”);
n=atoi(argv[1]);
如果(n<;0)
惊慌失措(“n太小”);
如果(n>;限制)
恐慌(“n太大”);
/*您的代码从这里开始*/
//分配内存
//计算i=0到n的事实(n)
事实表=calloc(n+1,sizeof(struct fact\u entry));
长整型f=1;
char-buf[20];
对于(i=0;i<;=n;i++)
{
如果(i==0){
f=f*i+1;;
}
否则{
f=f*i;
}
sprintf(buf,lld,f);
printf(“s\n”,buf);
事实表[i].n=i;
事实表[i].lli\U事实=f;
事实表[i].str\u fact=buf;
}
/*您的代码到此结束*/
//打印计算的数字
对于(i=0;i<;=n;i++)
{
printf(";%d%lld%s\n";,事实表[i].n,事实表[i].lli事实,事实表[i].str事实);
}
/*您的代码从这里开始*/
//空闲内存
免费(事实表);
/*您的代码到此结束*/
返回0;
}
如何将buf变量写入结构中。我只能在/*您的代码*/
charbuf[20]; ... 事实表[i].str\u fact=buf;
str\u fact是一个指针,指向buf。您有n+1元素,它们都指向相同的buf,它们都打印您在输出中看到的最后一个元素
您必须为每个str\u fact分配内存,以便它可以存储自己的字符串。请记住释放该缓冲区的内存
(i=0;i<;=n;i++)的
{
...
//事实表[i].str\u fact=buf;***删除此行
事实表[i].str_fact=malloc(strlen(buf)+1);
strcpy(事实表[i].str\u事实,buf);
}
对于(i=0;i<;=n;i++)
自由(事实表[i].str\u事实);
免费(事实表);
请注意,您正在分配n+1元素。如果需要n元素,则将其计数为i<;n所有循环中的