C语言文件问题

问题描述】有 n 个学生,从键盘输入学生数据(包括学号、姓名、成绩),学号输入为负数时代表输入结束,将学生数据按成绩由高到低进行排序处理,并将已排序的学生数据存入文件 stu-sort.txt 中。
【输入形式】从键盘输入学生数据。
【输出形式】输出排序好的数据到屏幕和指定文件。
【样例输入】
1000 tss 69
101 hgf 72
2 ius 60
-1
【样例输出】
屏幕和文件的内容为:
101 hgf 72
1000 tss 69
2 ius 60
【样例说明】学生数据定义为结构体,学号和成绩定义为整型即可

我的代码

include<stdio.h>

include<stdlib.h>

struct student {

int num;
char name[10];
int grade;

}stu[10];
void pai(struct student stu[], struct student temp,int n)
{

int i = 0, j = 0;
for (i = 0; i < n - 1; i++) {
    for (j = 0; j < n - 1 - i; j++) {
        if (stu[j].grade < stu[j + 1].grade) {
            temp = stu[j];
            stu[j] = stu[j + 1];
            stu[j + 1] = temp;
        }
    }
}

}
void save(int n)
{

FILE *fp;
int i;
if ((fp = fopen("stu-sort.txt", "wb")) == NULL)
{
    printf("ERROR\n");
    return;
}
for (i = 0; i < n; i++) {
    if (fwrite(&stu[i], sizeof(struct student), 1, fp) != 1)
        printf("ERROR\n");
}
fclose(fp);

}

int main()
{

int i;
int n=0;
for (i = 0;; i++)
{
    scanf("%d", &stu[i].num);
    if (stu[i].num < 0)
        break;
    scanf(" %s %d", stu[i].name, &stu[i].grade);
    n++;
}
struct student temp = { 0,"0",0 };
pai(stu, temp,n);
save(n);
for (i = 0; i < n; i++) {
    printf("%d %s %d\n", stu[i].num, stu[i].name, stu[i].grade);
}

system("pause");
return 0;

}

为什么我输出是对的 在文件里显示的是乱码呢??请大神指出错误 谢谢!!!

阅读 1.8k
1 个回答

这么写肯定是可以的,但是意义不一样。这么写的意思是把内存中的结构体数据原封不动的保存到磁盘文件中。也就是说它保存的是二进制数据,而不是文本数据,因此是不可读的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进