user-0 提问: 关于文本文件储存问题（输入数字变成乱码）

回复:
user: user-0
content: 引用 5 楼 zhao4zhong1 的回复:电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址； 人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……  推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。  不要把 fopen("...","...");fscanf,fprintf,fgets,fgetc,fclose //读时把\r\n替换成\n，写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待 和 fopen("...","...b");fseek,ftell,fread,fwrite,fgetc,fclose //不作以上替换，遇到\x1a仍继续读;读写的内容当字节看待 弄混了  对电脑而言没有乱码，只有二进制字节；对人脑才有乱码。啊 GBK:0xB0 0xA1,Unicode-16 LE:0x4A 0x55,Unicode-16 BE:0x55 0x4A,UTF-8:0xE5 0x95 0x8A 您的意思是我的这局 if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)中fwrite和下面的fread写的不对吗？

user: user-0
content: 引用 3 楼 paschen 的回复:你想在用记事本之类的程序打开不是乱码的话就把数字转成字符串再存，否则二进制文件用文本方式打开肯定是乱码，他把你的数字当作字符编码去理解你说能不乱。 另外试下打开方式使用"ab" 改写ab后怎么输入的第一个学生信息在文本里会存入两次，而且当自己把运行框×了后，再次运行直接选择浏览提示没有学生信息！求解！谢谢！

user: user-0
content: 引用 4 楼 q3733353520 的回复:写方式改为ab 如果想文本也能看，用格式化输入输出, fscanf , fprintf  改写ab后怎么输入的第一个学生信息在文本里会存入两次，而且当自己把运行框×了后，再次运行直接选择浏览提示没有学生信息！求解！谢谢！

user: user-1
content: 电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址； 人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……  推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。  不要把 fopen("...","...");fscanf,fprintf,fgets,fgetc,fclose //读时把\r\n替换成\n，写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待 和 fopen("...","...b");fseek,ftell,fread,fwrite,fgetc,fclose //不作以上替换，遇到\x1a仍继续读;读写的内容当字节看待 弄混了  对电脑而言没有乱码，只有二进制字节；对人脑才有乱码。啊 GBK:0xB0 0xA1,Unicode-16 LE:0x4A 0x55,Unicode-16 BE:0x55 0x4A,UTF-8:0xE5 0x95 0x8A

user: user-2
content: 写方式改为ab 如果想文本也能看，用格式化输入输出, fscanf , fprintf

user: user-3
content: 你想在用记事本之类的程序打开不是乱码的话就把数字转成字符串再存，否则二进制文件用文本方式打开肯定是乱码，他把你的数字当作字符编码去理解你说能不乱。 另外试下打开方式使用"ab"

user: user-4
content: 参考 http://www.dreamdu.com/xhtml/ascii/ 中的可打印字符。

user: user-5
content: 你存的是二进制格式数据，用文本打开的解码格式不对，显示的就是乱码;另外用“w”写文件是先把文件里的数据清空，在重新写入数据，所以在次运行函数时先前存入的数据就会丢失

user: user-2
content: 引用 10 楼 baidu_31569923 的回复:[quote=引用 8 楼 baidu_31569923 的回复:] [quote=引用 5 楼 zhao4zhong1 的回复:] 电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址； 人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……  推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。  不要把 fopen("...","...");fscanf,fprintf,fgets,fgetc,fclose //读时把\r\n替换成\n，写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待 和 fopen("...","...b");fseek,ftell,fread,fwrite,fgetc,fclose //不作以上替换，遇到\x1a仍继续读;读写的内容当字节看待 弄混了  对电脑而言没有乱码，只有二进制字节；对人脑才有乱码。啊 GBK:0xB0 0xA1,Unicode-16 LE:0x4A 0x55,Unicode-16 BE:0x55 0x4A,UTF-8:0xE5 0x95 0x8A 您的意思是我的这句 if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)中fwrite和下面的fread写的不对吗？[/quote]  引用 9 楼 q3733353520 的回复:[quote=引用 6 楼 baidu_31569923 的回复:] [quote=引用 4 楼 q3733353520 的回复:] 写方式改为ab 如果想文本也能看，用格式化输入输出, fscanf , fprintf  改写ab后怎么输入的第一个学生信息在文本里会存入两次，而且当自己把运行框×了后，再次运行直接选择浏览提示没有学生信息！求解！谢谢！[/quote]  你那个a变量的原因[/quote] 嗯 我已经找到原因了！那你知道怎么实现在终止程序后a的值也被保存下来吗？试了好多种方法都不行！[/quote]  不可能可以的，只有也用文件保存起来

user: user-0
content: 引用 8 楼 baidu_31569923 的回复:[quote=引用 5 楼 zhao4zhong1 的回复:] 电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址； 人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……  推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。  不要把 fopen("...","...");fscanf,fprintf,fgets,fgetc,fclose //读时把\r\n替换成\n，写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待 和 fopen("...","...b");fseek,ftell,fread,fwrite,fgetc,fclose //不作以上替换，遇到\x1a仍继续读;读写的内容当字节看待 弄混了  对电脑而言没有乱码，只有二进制字节；对人脑才有乱码。啊 GBK:0xB0 0xA1,Unicode-16 LE:0x4A 0x55,Unicode-16 BE:0x55 0x4A,UTF-8:0xE5 0x95 0x8A 您的意思是我的这句 if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)中fwrite和下面的fread写的不对吗？[/quote]  引用 9 楼 q3733353520 的回复:[quote=引用 6 楼 baidu_31569923 的回复:] [quote=引用 4 楼 q3733353520 的回复:] 写方式改为ab 如果想文本也能看，用格式化输入输出, fscanf , fprintf  改写ab后怎么输入的第一个学生信息在文本里会存入两次，而且当自己把运行框×了后，再次运行直接选择浏览提示没有学生信息！求解！谢谢！[/quote]  你那个a变量的原因[/quote] 嗯 我已经找到原因了！那你知道怎么实现在终止程序后a的值也被保存下来吗？试了好多种方法都不行！

user: user-2
content: 引用 6 楼 baidu_31569923 的回复:[quote=引用 4 楼 q3733353520 的回复:] 写方式改为ab 如果想文本也能看，用格式化输入输出, fscanf , fprintf  改写ab后怎么输入的第一个学生信息在文本里会存入两次，而且当自己把运行框×了后，再次运行直接选择浏览提示没有学生信息！求解！谢谢！[/quote]  你那个a变量的原因