gpt4 book ai didi

C 程序未将值传递给方法

转载 作者:行者123 更新时间:2023-11-30 15:50:15 28 4
gpt4 key购买 nike

我正在做家庭作业,遇到了一些奇怪的事情。我有三个文件:Lab3.c、Lab3.h 和 driver.c。 driver.c 正在调用 Lab3.c 中的方法,但无法将值传递到该方法中。

// code from driver.c
float cyRad, cyHt;
printf("Enter a radius for the cylinder: ");
scanf("%f", &cyRad);
printf("%f\n", cyRad);
printf("Enter a height for the cylinder: ");
scanf("%f", &cyHt);
float cyVol = cylinder(cyRad, cyHt);
printf("Cylinder volume: %f\n", cyVol);

// code from Lab3.c
float cylinder(float radius, float height)
{
printf("%f %f %f\n", M_PI, height, radius);
return M_PI * height * pow(radius, 2);
}

// code from Lab3.h
#ifndef __LAB3_H
#define __LAB3_H

extern void sphere(float radius, float *surface, float *volume);
extern float volCylinder(float radius, float height);
extern double sumFloats(double x[], int numFloats);
extern double sine(float angle);

#endif

这是输出:

Enter a radius for the cylinder: 13
13.000000
Enter a height for the cylinder: 45
3.141593 0.000000 0.000000
Cylinder volume: 0.000000

我不知道为什么它不将值传递到方法 cylinder 。任何和所有的帮助将不胜感激。

最佳答案

调用函数时,作用域内必须有原型(prototype),否则会假定返回 int 并且其参数类型未知。当将 float 传递给具有未知参数类型的函数时,它们会作为 double 传递,这将导致函数中出现虚假值(行为未定义,因此理论上任何事情都可能发生,尽管实际发生的情况取决于实现,但它不会是你想要的)。

在多文件程序中进行作用域声明的最佳方法是为每个 .c 文件提供一个 .h 文件; .h 文件声明 .c 文件中定义的函数(和其他全局变量)。然后将 .h 文件 #include 到使用这些全局变量的任何文件中...包括配套的 .c 文件。

关于C 程序未将值传递给方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15857531/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com