C 函数中不考虑的范围?

C 函数中不考虑的范围?,c,struct,C,Struct,这是一个非常简单的程序,我用它来测试一些我刚接触过的结构 如果您尝试执行该程序,您会注意到void函数中的第一个If被忽略(或者可能不满足),即使您以错误的顺序执行该程序: Candidate.BMI = Candidate.weigth/(Candidate.heigth * Candidate.heigth); puts("Insert subject's name: "); fgets(Candidate.name, 50, stdin); puts("In

这是一个非常简单的程序,我用它来测试一些我刚接触过的结构


如果您尝试执行该程序,您会注意到void函数中的第一个
If
被忽略(或者可能不满足),即使您以错误的顺序执行该程序:

    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

Candidate.BMI=Candidate.weigth/(Candidate.heigth*Candidate.heigth)时,这些值被初始化移动到输入后(在
检查_BMI(候选者);
之前)。请在问题中包含代码。在从输入中获取值之前,您是否实际计算BMID@Nitram:某些编程语言是这样工作的:。但是C没有。谢谢,我有多蠢?大约30分钟后我就要考试了,我不能把事情做好。这是个愚蠢的错误,明白了,谢谢。@GiorgioDT,没关系。我们每个人偶尔都会遇到这种情况。。。不客气!:-)
check_BMI(Candidate);