数据写入文本 出现乱码 请教

C语言 码拜 5年前 (2016-04-27) 467次浏览
#include <stdio.h>
#include <stdlib.h>
#define N 30
typedef struct contacts
{      long CONTACTSPhone;
char CONTACTSName[10];
char CONTACTSAdress[10];
long CONTACTSPost;
} CONTACTS;
void   access (CONTACTS con[],int n);
void writetoFile(CONTACTS con[],int i);
int main()
{       CONTACTS con[N] ;
int    x    ,      i       ,    n  ,j     ;
printf(”    1      存取     \n”);
printf(”    2      显示     \n”);
printf(”    3      删除记录     \n”);
printf(”    4      查询记录     \n”);
printf(“输入你需要的功能对应的数字\n”);
scanf (“%d”,&x);
if    (“x==1”)
{       printf(“存入几个联系人?\n”);
scanf (“%d”,&n);
access(con,n);
writetoFile(con,n);
}
}
void   access (CONTACTS con[],int n)
{      int i;
for(i=0;i<n;i++)
{    printf(“输入联系人姓名\n”);
scanf(“%s”,con[i].CONTACTSName);
getchar();
printf(“输入联系人电话号码\n”);
scanf(“%ld”,&con[i].CONTACTSPhone);
printf(“输入联系人邮编\n”);
scanf(“%ld”,&con[i].CONTACTSPost);
printf(“输入联系人地址\n”);
scanf(“%s”,con[i].CONTACTSAdress);
}
}
void writetoFile(CONTACTS con[],int n)
{   int i;
FILE *fp;
if((fp=fopen(“contacts.txt”,”w”))==NULL)
{
printf(“打开文件失败!\n”);
exit (0);
}   for(i=0;i<=n;i++)
{      fprintf(fp, “%1s”,  con[i].CONTACTSName);
fprintf (fp, “%10ld”,con[i].CONTACTSPhone);
fprintf(fp, “%10ld”,con[i].CONTACTSPost);
fprintf(fp, “%1s”, con[i].CONTACTSAdress);}
fclose(fp);
}   这是  代码
李华-1650763301 176545544重庆€      1288     65792     这是运行结果   高手帮帮忙。
解决方案

40

main函数里if(“x==1”)改为if(x==1)
writetoFile函数里for(i=0;i<=n;i++)改为for(i=0;i<n;i++)这里多循环了一次
上面两处改掉以后本人运行出来的结果是对的

5

 int    x    ,      i       ,    n  ,j     ;  把这一行 定义全局变量  ,
例如
int InNum,PeNum;
试一试

10

没问题,采取的二进制记录,所以文本打开有问题,实际上是保存成功的。
建议:写完查询记录模块,和显示模块。最后写读取文本数据模块。

5

乱码一般都是编码格式的问题  试试GB2312

5

电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址;
人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……
推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。
不要把
fopen(“…”,”…”);fscanf,fprintf,fgets,fgetc,fclose //读时把\r\n替换成\n,写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待

fopen(“…”,”…b“);fseek,ftell,fread,fwrite,fgetc,fclose //不作以上替换,遇到\x1a仍继续读;读写的内容当字节看待
弄混了

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明数据写入文本 出现乱码 请教
喜欢 (0)
[1034331897@qq.com]
分享 (0)