2 yxts122 YXTS122 于 2016.01.27 18:57 提问

为什么一定要用写字板的方式打开?

通过下面这些,我发现:如果要把信息保存在txt文件中,就必须以写字板的方式打开这
个txt文件,再来写入信息,这样的话就可以正确地读出这个txt文件里的内容。如果以记
事本的方式打开这个txt文件就不可以正确地读出这个txt文件里的内容。不知道我的这个
想法对不对?还有就是同样的一个txt文件,用记事本的方式和用写字板的方式打开,里
面的内容怎么会不一样?
图片说明
图片说明

 #include<stdio.h>
#include<stdlib.h>
struct st
{
    char name[4];
    char age[3];
    char tel[9];
}s[3];
void main()
{
    int i,n;
    FILE *fpe; FILE *fpo;
    for(i=0;i<3;i++)
    {
        scanf_s("%s",s[i].name,4);getchar();
        scanf_s("%s",s[i].age,3);getchar();
        scanf_s("%s",s[i].tel,9);getchar();
    }
    fopen_s(&fpo,"e:\\students.txt","w");
    if(fpo==NULL)
    {
        printf("打不开\n");
        exit(0);
    }
    for(i=0;i<3;i++)
    {
        n=fwrite(&s[i],sizeof(struct st),1,fpo);
        if(n!=1)
            printf("file write error");
    }
    fclose(fpo);
    fopen_s(&fpe,"e:\\students.txt","r");
    if(fpe==NULL)
    {
        printf("打不开\n");
        exit(0);
    }
    for(i=0;i<3;i++)
    {
        n=fread(&s[i],sizeof(struct st),1,fpe);
        if(n!=1)
            printf("file read error");
        printf("%-4s%3s%9s\n",s[i].name,s[i].age,s[i].tel);
    }
    fclose(fpe);
    system("pause");
}

6个回答

enpterexpress
enpterexpress   2016.01.27 20:26
已采纳

图片说明

YXTS122
YXTS122 还是不行,同一个txt文件用记事本打开和用写字板打开,里面的内容还是不一样。
接近 2 年之前 回复
caozhy
caozhy   Ds   Rxr 2016.01.27 19:03

因为windows xp下的记事本不识别你的vs2010+默认的双字节编码。
如果你用windows 7以上,在记事本中打开对话框,选择正确的编码,也能打开,或你用VC++ 6写你的程序,在记事本也能打开。

qq_26946497
qq_26946497 我去,我完全意识不到windowsXP,现在真的还有人用xp嘛,毕竟64位...
接近 2 年之前 回复
qq_27183003
qq_27183003 赞同,和系统、编码有关系。我的win8.1记事本打开,显示没有乱码。
接近 2 年之前 回复
caozhy
caozhy 回复YXTS122: 写字板可以识别编码。
接近 2 年之前 回复
YXTS122
YXTS122 那写字板呢?它没要求么?
接近 2 年之前 回复
enpterexpress
enpterexpress   2016.01.27 19:41

字符集设置一下

YXTS122
YXTS122 在哪里设置?设置成什么?
接近 2 年之前 回复
ChengFeiNiu
ChengFeiNiu   2016.01.28 07:19

编码问题,存贮的时候注意

pioneerlinzi
pioneerlinzi   2016.01.28 09:42

如果是乱码就是字符集的问题!如果是格式的话,可能是换行符与制表符之类的不同!

91program
91program   Ds   Rxr 2016.01.27 19:01

是不是只是显示的原因?建议你使用 Ultraedit 打开查看 HEX,或者使用 Beyond Compare 二进制对比两个文件。

YXTS122
YXTS122 回复91program:文本文件的头两个字节写入标志,什么意思,在哪里写入?
接近 2 年之前 回复
91program
91program 回复YXTS122: 记事本与写字板打开文本文件,应该是一样的。显示不同,可能是字符的编码问题。记事本打开 Unicode 文件,需要在文本文件的头两个字节写入标志:0xfffe。否则记事本打开 Unicode 文件显示肯定是乱码。
接近 2 年之前 回复
YXTS122
YXTS122 不是两个文件,是一个文件,只不过用不同的打开方式打开而已。。。。
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!