如何在C

时间:2016-05-17 07:24:33

标签: c function call void

好的,所以我用四种不同的函数编写了这段代码,其主要目的是在角度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;
    }

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

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

5 个答案:

答案 0 :(得分:1)

您必须保留在主要功能之外创建的功能

答案 1 :(得分:1)

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

编辑:也就是说,GCC在{{3}},但它不可移植。

答案 2 :(得分:1)

尝试在main()

之外实现您的功能

答案 3 :(得分:1)

  

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

更改

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

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

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

答案 4 :(得分:0)

  

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

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