C-从函数返回结构成员

  • 本文关键字:结构 成员 返回 函数 c
  • 更新时间 :
  • 英文 :


我正在编写这段代码,用于计算每加仑英里数,其中英里数和加仑数是从键盘上读取的。该程序将执行一个简单的计算来获得每加仑英里数。我写了一个函数来完成这个计算,但它没有返回结果。在函数内部,一切都正常工作。我甚至写了一个printf来确保计算正确。但是,当我试图将其返回到主函数时,结构的成员似乎具有值0,而不是计算结果。这是我的代码:

#include <stdio.h>
#include <stdlib.h>
struct gas {
float distance;
float gals;
float mpg;
};
float CalculateMpg(struct gas idk){
idk.mpg = idk.distance / idk.gals;
printf("%f n", idk.mpg);
return idk.mpg;
}
int main()
{
struct gas idk;
printf("Enter distance (in miles): ");
scanf("%f", &idk.distance);
printf("Enter gallons fueled: ");
scanf("%f", &idk.gals);
CalculateMpg(idk);
printf("%f n", idk.mpg);
printf("Miles driven gallons used with %.2f miles and %.2f gallons: %.2f mpg n", idk.distance, idk.gals, idk.mpg);
return 0;
}

原因:因为C使用按值调用

当您调用函数CalculateMpg()时,idk会按值复制到参数变量中。

在此函数中,只编辑复制的参数。

您应该使函数使用指针并将其调用到CalculateMpg(&idk)

样品溶液:

#include <stdio.h>
#include <stdlib.h>
struct gas {
float distance;
float gals;
float mpg;
};
float CalculateMpg(struct gas* idk){
idk->mpg = idk->distance / idk->gals; // arrow is just syntactic sugar of (*idk).field
printf("%f n", idk->mpg);
return idk->mpg;
}
int main()
{
struct gas idk;
printf("Enter distance (in miles): ");
scanf("%f", &idk.distance);
printf("Enter gallons fueled: ");
scanf("%f", &idk.gals);
CalculateMpg(&idk);
printf("%f n", idk.mpg);
printf("Miles driven gallons used with %.2f miles and %.2f gallons: %.2f mpg n", idk.distance, idk.gals, idk.mpg);
return 0;
}

最新更新