#include<stdio.h> #include<stdlib.h> #include<string.h> struct student { int num; char name; char gender; int brt; int dst; int eng; int length; }studentlist; FILE *fp; void InsertList(struct studentlist *L) main() { struct student stu; /*定义学生变量stu*/ char tag; /*设置标志是否继续添加数据*/ int tolower(int tag); do { printf("学号:"); scanf("%d",&stu.num); printf("姓名:"); scanf("%s",stu.name); printf("性别:"); scanf("%s",stu.gender); printf("出生年月:"); scanf("%d",&stu.brt); printf("第二学期数据结构成绩:"); scanf("%s",stu.dst); printf("第二学期大英成绩:"); scanf("%s",stu.eng); printf("学生信息表长度:"); scanf("%s",stu.length); fseek(fp,0,SEEK_END); /*将指针移动到文件尾部*/ /*将学生信息存入文件中*/ fwrite(&stu,sizeof(struct student),1,fp); printf("继续添加吗(y/n):"); while (getchar()!='\n'); /*跳过当前行*/ tag=getchar(); tag=tolower(tag); /*将大写字母转化为小写字母*/ while(tag!='y'&&tag!='n') { printf("输入非法,重新输入(y/n):"); while(getchar()!='\n'); /*跳过当前行*/ tag=getchar(); tag=tolower(tag); /*将大写字母转化为小写字母*/ } }while(tag=='y'); /*当回答要求循环时*/ }
时间: 2024-01-18 10:03:45 浏览: 117
学生成绩管理
这段代码存在一些问题,首先是函数声明和主函数的定义不匹配,主函数应该是:
```
int main() {
...
return 0;
}
```
然后是结构体的定义和变量的声明应该分开,应该是:
```
struct student {
int num;
char name[20];
char gender;
int brt;
int dst;
int eng;
int length;
};
struct student studentlist;
int main() {
...
}
```
还有就是在使用 `scanf` 函数读取字符串时,应该使用 `%s` 格式化符,而不是 `%c`。
另外,代码中使用了文件操作函数,但是没有打开文件,应该在主函数开头加上:
```
fp = fopen("students.dat", "ab+");
if (fp == NULL) {
printf("文件打开失败!\n");
exit(1);
}
```
最后,在写入文件时应该检查是否写入成功,可以用 `fwrite` 函数的返回值进行检查:
```
if (fwrite(&stu, sizeof(struct student), 1, fp) != 1) {
printf("写入失败!\n");
exit(1);
}
```
综上所述,修改后的代码如下:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct student {
int num;
char name[20];
char gender;
int brt;
int dst;
int eng;
int length;
};
struct student studentlist;
FILE *fp;
int main() {
fp = fopen("students.dat", "ab+");
if (fp == NULL) {
printf("文件打开失败!\n");
exit(1);
}
struct student stu;
char tag;
do {
printf("学号:");
scanf("%d", &stu.num);
printf("姓名:");
scanf("%s", stu.name);
printf("性别:");
scanf("%s", &stu.gender);
printf("出生年月:");
scanf("%d", &stu.brt);
printf("第二学期数据结构成绩:");
scanf("%d", &stu.dst);
printf("第二学期大英成绩:");
scanf("%d", &stu.eng);
printf("学生信息表长度:");
scanf("%d", &stu.length);
fseek(fp, 0, SEEK_END);
if (fwrite(&stu, sizeof(struct student), 1, fp) != 1) {
printf("写入失败!\n");
exit(1);
}
printf("继续添加吗(y/n):");
while (getchar() != '\n');
tag = getchar();
tag = tolower(tag);
while (tag != 'y' && tag != 'n') {
printf("输入非法,重新输入(y/n):");
while (getchar() != '\n');
tag = getchar();
tag = tolower(tag);
}
} while (tag == 'y');
fclose(fp);
return 0;
}
```
阅读全文