C编程BMI程序

时间:2013-10-21 20:29:15

标签: c

我在使用此程序时使用指针和引用时遇到问题。我完全不了解它。我仍然是C的新手,我们只触及指针,但没有那么多。任何帮助将不胜感激。

编辑:现在不要让我输入任何东西......

这是我的新代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define F 703


int getStats(FILE *statsfp, int *patientID, double *weight, double *height, double *bodymassIndex);
double getBodyMassIndex(double weight, double height);
void printWeightStatus(FILE *statsfp, int patientID, double weight, double height, double bodyMassIndex);


void pause()
{
    char ans;

    fflush(stdin);
    printf("\nPress return to continue");
    scanf("%c", &ans);
}

int main() {

    FILE statsfp;
    int patientID;
    double weight, height, bodyMassIndex;

    getStats(&statsfp,&patientID, &weight, &height, &bodyMassIndex);


    pause();
    return 0;
}

int getStats(FILE *statsfp, int *patientID, double *weight, double *height, double *bodyMassIndex)
{




    statsfp = fopen("patientStats.txt","r");
    if (statsfp == NULL)
    {
        printf("\nFailed to open the %s file.\n", "patientStats.txt");
        pause();
        exit(1);
    }

    printf("\nPatient ID\t Weight\t Height\t BMI\t Weight Status\n");
    printf("\n---------------------------------------------------\n");


    while (fscanf (statsfp, "%d %lf %d", &patientID, &weight, &height) !=EOF)
    {
        getBodyMassIndex(*weight, *height);

        printWeightStatus(statsfp, *patientID, *weight, *height, *bodyMassIndex);
    }

    fclose(statsfp);

    return 0;


}

double getBodyMassIndex(double weight, double height)
{
    double bodyMassIndex = 0;

    bodyMassIndex = (F*weight)/(height * height);

    return bodyMassIndex;

}

void printWeightStatus(FILE *statsfp, int patientID, double weight, double height, double bodyMassIndex)
{
    char *weightStats;

    if (bodyMassIndex < 18.5)
        weightStats = "underweight";
    else if (bodyMassIndex >= 18.5) 
        weightStats = "normal";
    else if (bodyMassIndex >= 25.0)
        weightStats = "overweight";
    else if (bodyMassIndex >= 30.0)
        weightStats = "obese";

    printf("%6d\t %6.2f\t %6.2f\t %s", &patientID,&weight, &height, weightStats);

}

2 个答案:

答案 0 :(得分:1)

警告#1:你的getStats函数可以在两个地方退出,但只有第一个实际返回一个值。它应该更像是:

function getStats() {
  if (...) {
     return foo;
  }
  ....
  return baz; <--missing this
}

警告#2:您在函数开头声明bodyMassIndex,但是在没有为其分配值的情况下将其传递给printWeightStatus

警告#3:同上,你宣布statsFP,但是在没有每次初始化的情况下将其传递给函数,然后在getStats中初始化它

答案 1 :(得分:0)

您的第一个错误是函数getStats并不总是返回值。

的确,当我查看该函数时,我在函数中的任何地方都没有看到任何return语句。

当我看到原型时,我看到了:

int getStats(...

表示假定返回int

您应该更改函数以使其返回int,或者将函数的声明更改为void,表示它不应该返回值。