#include<stdlib.h> #define N 10 typedef struct { char no[15]; char name[10]; float score[3]; float aver; }STU; void Input_Info(STU a[], int n) { /********** Begin **********/ for(int i=0; i<n; i++) { scanf("%s%s", a[i].no, a[i].name); for(int j=0; j<3; j++) { scanf("%f", &a[i].score[j]); a[i].aver+=a[i].score[j]/3; } } /********** End **********/ } void Write_Info(STU a[], int n){ /********** Begin **********/ FILE *fp; fp=fopen("record", "a"); if(fp==NULL) { printf("不能打开文件!\n"); exit(0); } fwrite(a, sizeof(STU), n, fp); fclose(fp); /********** End **********/ }哪里错了
时间: 2023-07-06 15:35:32 浏览: 49
这段代码存在一些问题:
1. 在 `Input_Info` 函数中,`aver` 没有被初始化为0,导致平均分计算不正确。
2. 在 `Write_Info` 函数中,使用了 `fwrite` 将结构体数组写入文件,但结构体中包含指针类型的成员,无法正确地写入文件。
建议使用 `fprintf` 函数将结构体成员逐个写入文件,例如:
```
void Write_Info(STU a[], int n) {
FILE *fp;
fp = fopen("record", "a");
if (fp == NULL) {
printf("不能打开文件!\n");
exit(0);
}
for (int i = 0; i < n; i++) {
fprintf(fp, "%s %s %.2f %.2f %.2f %.2f\n", a[i].no, a[i].name, a[i].score[0], a[i].score[1], a[i].score[2], a[i].aver);
}
fclose(fp);
}
```
另外,建议在函数中添加一些错误处理机制,例如对文件打开失败进行处理等。
相关问题
#include <stdio.h> #include <stdlib.h> #define MAXSIZE 100 typedef int ElemType; typedef struct
这段代码是C语言中的头文件引用和一些定义的示例。其中,`#include <stdio.h>`和`#include <stdlib.h>`是用来引入标准库函数的头文件。`stdio.h`包含了输入输出相关的函数,如`printf`和`scanf`;`stdlib.h`包含了一些常用的函数,如内存分配函数`malloc`和随机数生成函数`rand`。
`#define MAXSIZE 100`是一个宏定义,用来定义一个常量`MAXSIZE`,它的值为100。
`typedef int ElemType;`是用来给`int`类型起一个别名`ElemType`,方便在代码中使用。
至于代码中的结构体部分,由于你没有提供完整的代码,所以无法给出具体的解释。但一般来说,结构体用于定义一种自定义的数据类型,可以包含多个不同类型的成员变量。
#include <iostream.h> #include <stdlib.h> #define MAXSIZE 100 //顺序栈初始化时分配的存储空间长度 typedef struct
#include <iostream.h> 是一个C++的头文件,用于输入输出流操作。它包含了一些用于输入输出的函数和对象,例如cout和cin。
#include <stdlib.h> 是一个C语言的头文件,它包含了一些常用的函数,例如malloc和free,用于动态内存分配和释放。
#define MAXSIZE 100 是一个预处理指令,用于定义一个常量MAXSIZE,并将其值设置为100。这样在程序中可以使用MAXSIZE来表示一个固定的长度。
typedef struct 是用于定义结构体的关键字。结构体是一种自定义的数据类型,可以包含多个不同类型的成员变量。
请问还有什么其他问题吗?