#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> typedef struct student { char num[11]; char name[5]; char sex; int age; }Student; int main() { //创建,赋值 Student stu; strcpy(stu.num ,"20223000565"); strcpy(stu.name,"王五"); stu.sex ='男'; stu.age =17; //写入 FILE* p; char str[200]; if ((p = fopen("student.dat", "w")) == NULL) { printf("文件不存在或已损毁"); return 1; } fputs(stu.num, p); fputs(stu.name, p); fputs(stu.sex, p); fputs(stu.age, p); printf("写入成功\n"); fclose(p); fopen("student.dat", "r"); while (fgets(str, sizeof(stu), p) != NULL) { printf("%s\n", str); } fclose(p); //暂停程序 system("pause"); } 这段程序能运行吗?
时间: 2024-03-03 13:51:32 浏览: 137
这段程序存在几个问题,不能正常运行。
1.在结构体中,性别应该使用char数组类型存储,而不是char类型。
2.写入文件时,应该将结构体中的每个成员都写入,而不是只写入其中的部分成员。
3.读取文件时,应该使用"fread"函数,而不是"fgets"函数。
以下是修改后的程序:
```
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
typedef struct student {
char num[11];
char name[5];
char sex[3];
int age;
}Student;
int main() {
//创建,赋值
Student stu;
strcpy(stu.num, "20223000565");
strcpy(stu.name, "王五");
strcpy(stu.sex, "男");
stu.age = 17;
//写入
FILE* p;
if ((p = fopen("student.dat", "wb")) == NULL)
{
printf("文件不存在或已损毁");
return 1;
}
fwrite(&stu, sizeof(stu), 1, p);
printf("写入成功\n");
fclose(p);
//读取
if ((p = fopen("student.dat", "rb")) == NULL)
{
printf("文件不存在或已损毁");
return 1;
}
fread(&stu, sizeof(stu), 1, p);
printf("%s %s %s %d\n", stu.num, stu.name, stu.sex, stu.age);
fclose(p);
//暂停程序
system("pause");
}
```
阅读全文