【问题标题】:warning: passing argument 2 of 'calcFx' makes integer from pointer without a cast警告:传递 'calcFx' 的参数 2 从指针生成整数而不进行强制转换
【发布时间】:2017-11-09 05:37:45
【问题描述】:

好的,我找到了我的问题的真正罪魁祸首,对于那些在此编辑之前在这里的人来说,数字扫描得很好。

void computeDataPoints(F_SELECT *fsPtr, int n,  double points[][n])
{
  int ix;  // for indexing points, i.e. columns of 2D array
  double x; // for incrementing the value of x
  double inc;  // incrementation value of x
  inc = (fsPtr->xf - fsPtr->x0)/(n-1);
  x= fsPtr->x0;

 // Setup loop that computes the points and stores in 2D array
  for (ix=0; ix<NUM_POINTS; ix = ix + 1)
   {
      points[X_IX][ix]=x;
      points[FX_IX][ix]=calcFx(x, &fsPtr->fNumber);
      x = x+ inc;
   }
}

我不知道如何解决这个问题并进行了一些搜索,如果有人知道如何正确地通过这个,我会永远爱你

【问题讨论】:

  • 您能否说明一下您是如何检查这些值是否正确存储的?
  • 你在使用之前没有声明selectFunction(&amp;fselect);。还有main returns int, not void
  • “输入点”是什么意思?你的意思是你跳过对selectFunction的函数调用?那么调试器实际上可能在 外部 main 函数,因此 fselect 不再在范围内。
  • 与您的问题无关,但您的 do-while 循环退出测试与您的错误条件不匹配。具体来说,如果输入大于 5 的数字,则会打印错误消息,但仍会退出循环。
  • 使用双精度存储整数有点奇怪。它有效,但将fNumber 设置为int 会更有意义。如果有人进入2.3你会怎么做?

标签: c pointers structure codeblocks


【解决方案1】:

我只是在这里猜测,因为真的很少发生,但我认为情况是这样的:

您在调试器中单步执行您的代码。当调试器光标位于scanf 行时,您在调用scanf 时停止。这意味着调用还没有发生。您需要再执行一次scanf 调用才会发生。

另一种可能性是您跳过了scanf 调用,调试器光标现在位于关闭} 的函数上。根据编译器及其生成的代码,这可能意味着变量 sfPtr 已超出范围,无法由调试器可靠地检查。

解决上述两种情况的方法是在scanf调用和函数结束之间添加另一条语句。例如一个简单的printf 调用来打印值:

    ...

    // Select a range of x for plotting
    printf("Select range of x for plotting (x0 and xf):");
    scanf("%lf %lf", &sfPtr->x0, &sfPtr->xf);

    // Print the values just entered
    printf("x0 = %f, xf = %f\n", sfPtr->x0, sfPtr->xf);

    // The function ends here
}

除了打印值之外,它还为您在调试器中提供了一个额外的步骤,以在调用 scanf 后检查值。

【讨论】:

  • 我正在使用调试器手表,显然不正确。但是发现了这个错误(如新编辑中所示)。感谢您使用额外的 printf 的建议
【解决方案2】:

我找到了

points[FX_IX][ix]=calcFx(x, &fsPtr->fNumber);

需要

points[FX_IX][ix]=calcFx(x, fsPtr->fNumber);

感谢所有在我找错地方时试图帮助我的人

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-30
    • 1970-01-01
    • 2019-09-17
    • 2012-11-03
    • 2021-07-12
    • 1970-01-01
    • 2021-11-27
    • 1970-01-01
    相关资源
    最近更新 更多