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 関数は 2 つの場所で終了できますが、実際に値を返すのは最初の場所だけです。それはもっと似ているはずです:

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 に答える