函数中不受尊重的范围?

这是一个非常简单的程序,我测试了一些与我一起使用的结构的东西。

如果您尝试执行该程序,您会注意到,即使在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.weigthCandidate.heigth )。 这导致未定义的行为。

移动解决问题

Candidate.BMI = Candidate.weigth/(Candidate.heigth * Candidate.heigth);

就在之前

check_BMI(Candidate);

以便在计算Canditate.BMI时将值初始化。

链接地址: http://www.djcxy.com/p/22885.html

上一篇: Range not respected in a function?

下一篇: Convert 2D array to string in C#, looking for most elegant way