读书人

fwrite输出的txt资料乱码求解

发布时间: 2012-08-16 12:02:15 作者: rapoo

fwrite输出的txt文件乱码求解
# include <stdio.h>
# include <stdlib.h>

struct Student
{
char Name[10];
float Math;
float Chinese;
float English;
}pArr[100];

void save (char *name, int n)
{
FILE *fp;
int i;

if( ( fp = fopen(name, "w+") ) == NULL )
{
printf("打开文件失败");
exit(0);
}
for(i=0; i < n; i++)
if( fwrite( &pArr[i], sizeof(struct Student), 1, fp) != 1 )
printf("写入失败");
fclose (fp);
}

void show (char *name, int n)
{
FILE *fp;
int i;
if( ( fp = fopen(name, "r+") ) == NULL )
{
printf("打开文件失败");
exit(0);
}
for(i=0; i < n; i++)
{
fread( &pArr[i], sizeof(struct Student), 1, fp );
printf("%15s%10f%10f%10f\n", pArr[i].Name, pArr[i].Math, pArr[i].Chinese, pArr[i].English);
}
fclose (fp);
}


int main()
{
int n, i;
char filename[50];
printf("请输入有多少个同学:");
scanf("%d", &n);
printf("请输入文件名:");
scanf("%s", filename);
printf("请输入姓名以及数学,语文,英语成绩:\n");
for(i=0; i < n; i++)
{
printf("请输入第%d位同学的信息:\n", i+1);
printf("\t姓名:");
scanf("%s", &pArr[i].Name);

printf("\t数学成绩:");
scanf("%f", &pArr[i].Math);

printf("\t语文成绩:");
scanf("%f", &pArr[i].Chinese);

printf("\t英语成绩:");
scanf("%f", &pArr[i].English);

save(filename, n);
}
show(filename, n);

return 0;
}

调试出来的答案没问题,能正常输出

但是txt却
a @A @A @Ab @A @A @A

多谢帮忙

[解决办法]
fwrite用2进制写入文本(wb模式),所以你看到的是乱码

TXT能正常显示的是文本模式(w模式),改成fprintf写入文本就行了
[解决办法]
fwrite用于写二进制文件,用文本处理软件打开乱码是正常的。使用fread进行读写。

读书人网 >C语言

热点推荐