我在使用此程序时使用指针和引用时遇到问题。我完全不了解它。我仍然是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);
}
答案 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
,表示它不应该返回值。