函数中不受尊重的范围?
这是一个非常简单的程序,我测试了一些与我一起使用的结构的东西。
如果您尝试执行该程序,您会注意到,即使在19 <= BMI <= 25
时,第一个if
在void函数中被忽略(或可能不满意)
#include <stdio.h>
#include <string.h>
#include <ctype.h>
typedef struct {
char name[50];
float weigth;
float heigth;
float BMI;
} subjects;
void check_BMI(subjects Candidate)
{
if (Candidate.BMI >= 19 && Candidate.BMI <= 25)
puts("Subject is probably in good shape");
else
puts("Subject might not be in good shape");
}
int main()
{
subjects Candidate;
Candidate.BMI = Candidate.weigth/(Candidate.heigth * Candidate.heigth);
puts("Insert subject's name: ");
fgets(Candidate.name, 50, stdin);
puts("Insert subject's weigth (in kg): ");
scanf("%f", &Candidate.weigth);
puts("Insert subject's heigth (in m): ");
scanf("%f", &Candidate.heigth);
check_BMI(Candidate);
return 0;
}
可能是我的错误?
你按照错误的顺序来做:
Candidate.BMI = Candidate.weigth/(Candidate.heigth * Candidate.heigth);
puts("Insert subject's name: ");
fgets(Candidate.name, 50, stdin);
puts("Insert subject's weigth (in kg): ");
scanf("%f", &Candidate.weigth);
puts("Insert subject's heigth (in m): ");
您无法将BMI计算为尚未输入的两个数字的比率。 这应该如何工作?
输入完所有数字后,在打印结果之前,将BMI计算线移到某个地方。
你有
subjects Candidate;
这是未初始化的。 在申报之后,您可以使用
Candidate.BMI = Candidate.weigth/(Candidate.heigth * Candidate.heigth);
它使用未初始化的值计算Canditate.BMI
(垃圾: Candidate.weigth
, Candidate.heigth
)。 这导致未定义的行为。
移动解决问题
Candidate.BMI = Candidate.weigth/(Candidate.heigth * Candidate.heigth);
就在之前
check_BMI(Candidate);
以便在计算Canditate.BMI
时将值初始化。
上一篇: Range not respected in a function?
下一篇: Convert 2D array to string in C#, looking for most elegant way