【发布时间】:2016-05-08 17:23:42
【问题描述】:
我想计算体重指数并将其写入文件。如您所见,我尝试在另一个函数中计算它,但输出仅为 0。然后我尝试了不同的函数,如 int calculate 返回w/h*h 但他们都没有给我正确的答案。我找不到其他方法。
#include <stdio.h>
struct person
{
int personId;
double height;
double weight;
double BMI;
};
void calculate (double h, double w)
{
struct person p1;
p1.BMI = w / h*h ;
}
void write () {
FILE *file;
struct person p1;
file = fopen("bmi.txt","w");
if (file == NULL)
{
printf("Error");
}
else
{
printf("Person ID: "); scanf("%d",&p1.personId);
printf("Height: "); scanf("%lf",&p1.height);
printf("Weight: "); scanf("%lf",&p1.weight);
calculate(p1.height,p1.weight);
fwrite(&p1,sizeof(p1),1,file);
}
fclose(file);
}
void read() {
FILE *file;
struct person p1;
file = fopen("bmi.txt","r");
if (file == NULL)
{
printf("Error");
}
else
{
while (!feof(file))
{
fread(&p1,sizeof(p1),1,file);
printf("Person ID: %d\n",p1.personId);
printf("Height: %f\n",p1.height);
printf("Weight: %f\n",p1.weight);
printf ("BMI: %f\n",p1.BMI);
}
}
fclose(file);
}
int main () {
write();
read();
}
【问题讨论】:
-
h*h-->(h*h),void calculate (double h, double w)-->void calculate (struct person *p) -
while ( !feof)) {...}再次。顺便说一句,read()和write()是函数的可怕名称。只是说... -
您使用
fread读取输入数据,它读取二进制数据。您是否从文件中获得了预期的数据? (您似乎更想读取文本数据。) -
开始您的代码编译或提供确实编译的实际代码。为此启用警告并在询问之前清理它们。
-
感谢您的评论。在询问之前我已经阅读了所有内容,这对我来说似乎是正确的。但是我会再次阅读,下次我会更加小心。
标签: c file file-handling