【问题标题】:How to call a void function in C如何在 C 中调用 void 函数
【发布时间】:2016-05-17 07:24:32
【问题描述】:

好的,所以我用四个不同的函数编写了这段代码,它的主要目的是在 0-90 角的表格中显示速度的角度、时间、距离是多少。速度由用户输入。 但是当我调用创建函数的 void 函数时,我得到一个错误“未定义的对 `create_table' 的引用”这是我的代码。

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

#define G 9.8   /* gravitation acceleration 9.8 m/s^2 */
#define PI 3.141592654

void create_table(double v);
double Projectile_travel_time(double a, double v);
double Projectile_travel_distance(double a, double v);
double degree_to_radian(double d);

int main(void)
{
    int n;
    double velocity;

    printf ("please enter the velocity at which the projectile is launched (m/sec): ");
    n = scanf("%lf" ,&velocity);

    if(n != 1)
    {
        printf("Invlid input. Bye...");
        exit(1);
    }

    while (velocity < 0 )
    {
        printf ("please enter a positive number for velocity: ");
        n = scanf("%lf", &velocity);
        if(n != 1)
        {
            printf("Invlid input. Bye...");
            exit(1);
        }
    }
    create_table(velocity);


    return 0;
}
  void create_table(double v)
    {
        printf("Angle      t      d\n");
        printf("(deg)    (sec)   (m)\n");

        double a,i;
        for( a=0; a<=90; a+=5)
        {
            for(i=0; i<=2; i++)
            {
                double t = Projectile_travel_time(a, v);
                double s = Projectile_travel_distance(a, v);
                printf("%d       %d       %d\n", a, t, s);

            }
        }


    }
    double Projectile_travel_time(double a, double v)
    {
        double t = ((2*v*sin(degree_to_radian(a)))/(G));
        return t;
    }
    double Projectile_travel_distance(double a, double v)
    {
        double d = ((v*v)/G)*sin(2*degree_to_radian(a));
        return d;
    }

    double degree_to_radian(double d)
    {
         double r = d*atan(1) * 4 / 180;
         return r;
    }

任何帮助将不胜感激。 谢谢

edit 我已经编辑了代码,但现在遇到了另一个问题,我的输出完全关闭。有什么建议我的功能不正确吗?

【问题讨论】:

  • 你必须在main之外定义函数..

标签: c function call void


【解决方案1】:

您必须将您创建的函数保留在主函数之外

【讨论】:

  • 谢谢!但现在我得到了完全错误的数字。知道我的功能有什么问题吗?
  • 不,我不认为这是问题所在,因为速度只是被写入用户输入的任何内容。
  • 顺便说一句,您可以使代码更具可读性-例如。度到弧度是 (度/pi) *180 stackoverflow.com/questions/14920675/… #include inline double to_degrees(double radians) { return radians * (180.0 / M_PI); } :) 对于 pow,您可以使用 Math.pow 等
【解决方案2】:

尝试在 main() 之外实现你的函数

【讨论】:

  • 谢谢!但现在我得到了完全错误的数字。知道我的功能有什么问题吗?
  • 检查超出范围的值并尝试在此处粘贴输入值和预期输出值。
  • velocity 未初始化,您将其用作参数,因为它是一个局部变量,它可以包含任何垃圾编号。
【解决方案3】:

您需要将函数定义移出main。 C 不支持nested functions

编辑:也就是说,在GCC 中它们是,但它不是可移植的。

【讨论】:

  • 谢谢!但现在我得到了完全错误的数字。知道我的功能有什么问题吗?
  • 尝试调试它们,如果没有发现,请针对您不理解的部分提出一个新问题。
  • 谢谢,你知道为什么在 for 循环中即使我将 a 增加 5,但是一旦我打印 a 的值,我得到 0 的所有 19 次。
【解决方案4】:

我已经编辑了代码,但现在遇到了另一个问题,即我的输出完全关闭。

改变

printf("%d       %d       %d\n", a, t, s);

printf("%lf       %lf      %lf\n", a, t, s);

您可以使用%7.3f 对齐所有值。

【讨论】:

    【解决方案5】:

    将所有函数定义create_tableProjectile_travel_timeProjectile_travel_distancedegree_to_radian写在main外面。

    链接器无法在您调用 create_table 的位置找到 create_table 的定义。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-21
      • 1970-01-01
      • 2023-03-24
      • 2019-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多