在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/C/ C語(yǔ)言文件問(wèn)題

C語(yǔ)言文件問(wèn)題

問(wèn)題描述】有 n 個(gè)學(xué)生,從鍵盤(pán)輸入學(xué)生數(shù)據(jù)(包括學(xué)號(hào)、姓名、成績(jī)),學(xué)號(hào)輸入為負(fù)數(shù)時(shí)代表輸入結(jié)束,將學(xué)生數(shù)據(jù)按成績(jī)由高到低進(jìn)行排序處理,并將已排序的學(xué)生數(shù)據(jù)存入文件 stu-sort.txt 中。
【輸入形式】從鍵盤(pán)輸入學(xué)生數(shù)據(jù)。
【輸出形式】輸出排序好的數(shù)據(jù)到屏幕和指定文件。
【樣例輸入】
1000 tss 69
101 hgf 72
2 ius 60
-1
【樣例輸出】
屏幕和文件的內(nèi)容為:
101 hgf 72
1000 tss 69
2 ius 60
【樣例說(shuō)明】學(xué)生數(shù)據(jù)定義為結(jié)構(gòu)體,學(xué)號(hào)和成績(jī)定義為整型即可

我的代碼

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;

}

為什么我輸出是對(duì)的 在文件里顯示的是亂碼呢??請(qǐng)大神指出錯(cuò)誤 謝謝?。。?/p>

回答
編輯回答
妖妖

這么寫(xiě)肯定是可以的,但是意義不一樣。這么寫(xiě)的意思是把內(nèi)存中的結(jié)構(gòu)體數(shù)據(jù)原封不動(dòng)的保存到磁盤(pán)文件中。也就是說(shuō)它保存的是二進(jìn)制數(shù)據(jù),而不是文本數(shù)據(jù),因此是不可讀的。

2018年4月21日 17:02