【发布时间】:2018-04-18 16:42:27
【问题描述】:
我在学校的一个任务是用 C 语言处理文件。我有一个扩展名为 .dat 的文件,可以使用以下代码进行修改。在 .dat 文件中有关于学生的信息(具有 Student 结构)。
使用此代码,在我在控制台中输入某个部门(班级)编号后,我必须为学生的一个成绩添加一些分数。
#include <stdio.h>
typedef struct {
int code;
char name[30];
int year;
int dept;
int number;
int grade[15];
}Student;
void main(){
FILE * f;
char s1[20];
Student s;
int n, i;
printf("\nFile: ");
gets_s(s1);
if(!(f = fopen(s1, "rb+"))) printf("\nThe file %s cannot be open", s1);
else{
printf("\nClass: "); scanf("%d",&n);
while(!feof(stdin)){
rewind(f);
fread(&s, sizeof(Student), 1, f);
i = 0;
while(!feof(f)){
if(n == s.dept){
i = 1;
s.grade[0] = (s.grade[0] == 10) ? s.grade[0] : s.grade[0] + 1;
fseek(f, ftell(f) - sizeof(Student), 0);
fwrite(&s, sizeof(Student), 1, f);
fseek(f, 0, 1);
}
fread(&s, sizeof(Student), 1, f);
}
if(!i) printf("\n No student found in class %d", s.dept);
printf("\nClass: "); scanf("%d",&n);
}
fclose(f);
}
}
一切都好,但在控制台中我得到了一个奇怪的部门编号。
File: stud.dat
Class: 200
No student found in class -858993460
我认为这是因为没有从二进制到 ascii 的转换。我搜索了互联网,但没有找到任何可以帮助我的东西。有没有我需要插入的功能或类似的东西?
谢谢!
stud.dat 文件
e smith þþþþþþþþþþþþ 1 ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌf james þþþþþþþþþþþþ , ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌg mike þþþþþþþþþþþ ê
ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌh jon þþþþþþþþþþþþþþþþ m
ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ
【问题讨论】: