C语言编程出现汉字输出乱码现象

int cha()
{
int a[N],b[N];
int i=0,x,v1,v2;
FILE *f;
if((f=fopen("D:\123.txt","r"))==NULL)
{
printf("没有足够的数据显示!(返回上一级菜单1号选择)\n");return 0;
}
while(!feof(f))
{
fscanf(f,"%s%d",&a[i],&b[i]);
i++;
}
struct t
{
char a1[10];
int a2; }
t;
printf("请输入您所要录入的站点代号:\n");
scanf("%d",&i);
printf("请输入您所要录入的站点名称:\n");
scanf("%s",&v1);
printf("请输入当前站点到前一站点的价格:\n");
scanf("%d",&v2);

FILE *fp;
fp=fopen("D:\123.txt","r+");
a[i]=v1; b[i]=v2; fprintf(fp,"%s",&a[i]);
fprintf(fp,"%5d\n",b[i]); fclose(fp);
}
想从txt中输出汉字和数字然后对某一行进行修改,但是每次输出汉字时并不是输出某一行的,而是从输入行号后所有汉字的字符串,而且输出printf字符串不加&就运行错误,求指导

C语言中一个汉字是由两个字节来表示的
而C语言编程主要是以字节为单位来显示
所以你的C语言输出中,如果汉字显示只显示了一个字节,就会有乱码出现了
正常的做法是,你的printf输出时,符号的长度要为偶数字节。
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-12-15
//因为不知道你具体的功能流程,所以我只能先就语法来提下代码的问题
int cha()
{
//int a[N],b[N];
//int i=0,x,v1,v2;
char a[N][M] = {0}; //M为字符串最大长度加1,根据要求设置
int b[N] = {0};
int i=0,x,v2;
char v1[M] = {0};
FILE *f;
if((f=fopen("D:\123.txt","r"))==NULL)
{
printf("没有足够的数据显示!(返回上一级菜单1号选择)\n");return 0;
}
while(!feof(f))
{
//fscanf(f,"%s%d",&a[i],&b[i]);
fscanf(f,"%s%d", a[i],&b[i]); //%s说明输入的是字符串,不能用int型变量接收,要用char *型的
i++;
}
fclose(f); //后续没用到,最好将文件关闭
struct t
{
char a1[10];
int a2;
}t;
printf("请输入您所要录入的站点代号:\n");
scanf("%d",&i);
printf("请输入您所要录入的站点名称:\n");
//scanf("%s",&v1);
scanf("%s",v1);
printf("请输入当前站点到前一站点的价格:\n");
scanf("%d",&v2);

FILE *fp;
fp=fopen("D:\123.txt","r+");
//a[i]=v1;
strcpy(a[i], v1);
b[i]=v2;
//fprintf(fp,"%s",&a[i]);
fprintf(fp,"%s",a[i]);
fprintf(fp,"%5d\n",b[i]);
fclose(fp);
}本回答被网友采纳
第2个回答  2014-06-26
不加&就是指针了追问

//1.设计内容
//用户能够方便得查询某条公交线路的详细信息。
//要求系统实现以下功能:
//1) 提供系统操作的主界面;
//2) 提供某条公交线路各个站点的录入、修改、删除与保存;
//3) 提供某条公交线路各个站点间隔的票价信息。

追答

这个真心不会啊,我也是初学者,编写不来