首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

fwrite输出的txt资料乱码求解

2012-08-16 
fwrite输出的txt文件乱码求解# include stdio.h# include stdlib.hstruct Student{char Name[10]floa

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进行读写。

热点排行