所以我正在编写一个使用Horner规则计算多项式的程序。
但在输入第一个系数后,程序崩溃了。我做错了什么?我找不到错误。
编辑:我刚注意到我正在向后阅读论据。int main() {
int degree;
float x;
float px = 0;
float p = 0;
float *a;
int i;
a = malloc((degree+1)*sizeof(float));
printf("Enter the degree:");
scanf("%d", °ree);
printf("Enter the argument:");
scanf("%f", &x);
for (i = 0; i < degree+1; i++)
{
printf("Enter the coefficient Nr%d:", i+1);
scanf("%f", *(a+i));
}
for (i = degree; i > -1; i--)
{
p = *(a+i) * pow(x, i);
px + p;
}
printf("%f", px);
return 0;
}
答案 0 :(得分:3)
为a
分配内存时,degree
尚未初始化。
另外,从scanf("%f", *(a+i));
中删除星号。您需要a[i]
的地址,而不是值。
答案 1 :(得分:1)
在您的代码a = malloc((degree+1)*sizeof(float));
中,您使用degree
的值而不初始化它。初始化变量可以包含 ANY 值,最有可能无效,并将带您进入名为未定义行为的方案。这就是崩溃的原因。
第二件事,每次在malloc()
[或一般来说,库函数或系统调用]之后,检查返回值的有效性是一个非常好的主意。您可以在NULL
之后使用a
检查malloc()
变量。
第三,将scanf("%f", *(a+i));
更改为scanf("%f", &a[i]);
。
也许如果你按照以下方式编写代码,它应该可以工作。
int main() {
int degree;
float x;
float px = 0;
float p = 0;
float *a;
int i;
printf("Enter the degree:");
scanf("%d", °ree);
printf("Enter the argument:");
scanf("%f", &x);
a = malloc((degree+1)*sizeof(float));
for (i = 0; i < degree+1; i++)
{
printf("Enter the coefficient Nr%d:", i+1);
scanf("%f", &a[i]);
}
for (i = degree; i > -1; i--)
{
p = *(a+i) * pow(x, i);
px + p;
}
printf("%f", px);
return 0;
}