0

我在使用该程序的指针和引用时遇到问题。我完全不明白。我还是 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);

}
4

2 回答 2

1

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

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

警告#2:您bodyMassIndex在函数的开头声明,然后将其传递给它printWeightStatus而没有为其分配值:

警告#3:同上,你声明了 statsFP,但是将它传递给一个函数而不是每次初始化它,然后在 getStats 中初始化它

于 2013-10-21T20:35:22.197 回答
0

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

事实上,当我查看函数时,我在函数的任何地方都看不到任何return语句。

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

int getStats(...

表明它应该返回一个int.

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

于 2013-10-21T20:35:02.323 回答