#include <stdio.h>
#define G 9.81
//结构带来的使用称为USER_INPUT
typedef struct
{
double weight;
double drag;
double time;
} USER_INPUT;
void getInput(USER_INPUT *); //function prototype - which i think works
void main()
{
USER_INPUT input;
getInput(&input);
//这是输入值应显示的位置,但不会返回任何内容
printf("Weight = ", input.weight);
printf("Drag = ", input.drag);
printf("Time =", input.drag);
}
//单独的函数,我从用户那里获得输入。它有效但值不会传回主
void getInput (USER_INPUT *inpPtr)
{
printf("Please enter the weight:");
scanf("%lf", &inpPtr->weight);
fflush(stdin);
printf("Please enter the drag:");
scanf("%lf", &inpPtr->drag);
fflush(stdin);
printf("Please enter the time:");
scanf("%lf", &inpPtr->time);
fflush(stdin);
return(0); //<- idk if this is right either
}
答案 0 :(得分:0)
您描述的问题可归因于您将格式说明符从printf()
语句中删除。此外,您尝试两次显示.drag
:
printf("Weight = %g\n", input.weight);
printf("Drag = %g\n", input.drag);
printf("Time = %g\n", input.time);
函数getInput()
不会将值传递回main()
(它的返回类型为void
!),但它会修改存储在字段中的值USER_INPUT
结构input
存在于main()
范围内。
这里还有其他一些问题。 main()
函数始终返回int
,您应该这样声明:
int main(void){}
或者,如果您使用的是命令行参数,则可以执行以下操作:
int main(int argc, char *argv[]){}
或:
int main(int argc, char **argv){}
刷新输入流是未定义的行为,尽管它适用于某些系统。为了便于携带,最好不要这样做。你可以使用类似的东西:
while (getchar() != '\n')
continue;
在调用scanf()
后丢弃输入流中不需要的字符。
最后,返回类型为void
的函数不需要return
语句,尽管有些人喜欢使用return ;
来显式返回。但是,从这样的函数返回int
值肯定是错误的。