【问题标题】:polynomial pointer program error, scanner skipping inputs多项式指针程序错误,扫描仪跳过输入
【发布时间】:2017-03-26 07:12:12
【问题描述】:

我编写了这个程序,它计算用户输入的 x 值的 8 个多项式度数。程序运行,但是一旦我输入 8 个多项式,它应该允许我输入 x 的值,但它会跳过,并显示输出。我尝试在扫描仪功能中使用浮点数和双精度数,但这不起作用。任何帮助将不胜感激,谢谢。

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

void get_poly(double *coeff, int N);
double eval_poly(double *coeff, double base, int N);

int main(void)
{
    int N = 8;
    double res;
    double base = 0.0;
    double a[N];
    double *coeff;
    coeff = &a[0];

       printf("Enter the eight coeffecients: \n");
       scanf(" %d",&N);
       get_poly(coeff, N);

       printf("Enter x: \n");
       scanf(" %lf", &base);

       res=eval_poly(coeff, base, N);

       printf("Output: %f. \n",res); 


      return 0;
  }

void get_poly(double *coeff, int N)
{
   int i = 0;
   double placeholder;
   for (i = 0; i < N; i++)
   {
    scanf(" %lf", &placeholder);
    *coeff = placeholder;
    coeff++;
   }
}

double eval_poly(double *coeff, double base, int N)
{
   int i = 0;
   double res=0.0;

   for (i = 0; i < N; i++)
   res=res+coeff[i]*pow(base,i);

   return res;
}

【问题讨论】:

标签: c pointers polynomials


【解决方案1】:

一个主要问题是eval_poly 函数中的这个定义:

double res=coeff[N];

这里N 的值是传递给函数的数组的大小。将其用作索引将超出范围并导致未定义的行为。

与循环相同,条件i &lt;= N 将导致您索引数组超出范围。 而且你会将同一个元素计数两次。

您可能应该将res 初始化为零。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-08
    • 2014-10-26
    • 1970-01-01
    • 2015-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-14
    相关资源
    最近更新 更多