C语言程序文件保存问题

void save(struct Trains train[]){ /*保存信息函数*/
getchar();
FILE *fp;
int i;
if((fp=fopen("D:\\ticket.txt","w+"))==null){
printf("打开文件失败\n");
return;
}
for(i=0;i<H;i++)
if(fwrite(&train[i],sizeof(struct Trains),1,fp)!=1)
printf("信息保存出错!\n");
fclose(fp);
printf("信息保存成功!");
getchar();
}

还有一个

void load() /*读取车次信息*/
{ FILE *fp;
int i=0;
while((fp=fopen("D:\\ticket.txt","rb"))==NULL)
return;
for(i;!feof(fp);i++,H++)
{
if(fread(&train[H],sizeof(struct Trains),1,fp)!=1){}
if(feof(fp))
{
fclose(fp);
return;
}
}
fclose(fp);
}
班次 发车时间 起始站 终点站 运行时间 额定载量
输入 1 12:00 杭州 温州 4 200
输出:  杭州 温州 €@
为什么保存的信息会出现乱码,该怎么修改?

第1个回答  2013-08-18
你是以记事本保存的,而保存的数据里面有整数,整数不是字符,记事本显示的是乱码,如果想保存整数类型,需要报整数转化成字符串,你可以尝试使用fprintf和fscanf来读写文件.以下是例子:

在运用fprintf与fscanf时,在向文件输出数据及从文件读取数据时,分隔符应该相一致。如下程序所示,该程序的功能是:用户输入8个整型数据,程序回显并把数据写到int.txt文件中,然后程序再从int.txt文件中读取数据,并显示出来。
#include <stdio.h>
main()
{
FILE *fp;
int i,ss[8],new[8];
for(i=0;i<8;i++){
scanf("%d",&ss[i]);
}
fp=fopen("int.txt","w");
printf("start diesplay old data!/n");
for(i=0;i<8;i++){
printf("%d:%-10d/n",i+1,ss[i]);
fprintf(fp,"%d,",ss[i]);  /*输出数据时以逗号为数据之间的分隔符*/
}
fclose(fp);
printf("Now diseplay read date!/n");
if((fp=fopen("int.txt","r"))==NULL) return 1;
for(i=0;i<8;i++){
fscanf(fp,"%d,",&new[i]);  /*输入数据时以逗号为数据之间的分隔符,这样做到前后一致,                               读取数据不会错*/

printf("%d:%-10d/n",i+1,new[i]);
}
fclose(fp);
}

分隔符也可采用/n,即回车符,那么程序中二句相应改为:
fprintf(fp,"%d/n",ss[i]);
fscanf(fp,"%d/n",&new[i]); 追问

大神求指点。。。这两段代码要怎么改。。。我实在不懂

第2个回答  2013-08-18
你是读出来的跟写入的不一致吗?
如果你是记事本打开看到乱码不能说明问题追问

那该怎么解决

追答

你要保存的内容没有乱码,就不能整个结构写入啊,你得一个个字段按字符串写入

第3个回答  2013-08-18
既然用txt,就不要用rb啦,改成rt,wt,就好了追问

还是乱码哎。。。这两段代码有问题吗

追答

确实fwrite是以二进制写到文件的。可以用fprintf();我再试试看

追问

额,求代码,我不会

第4个回答  2013-08-18
你换成“wb+”试试

C语言程序文件保存问题
你是以记事本保存的,而保存的数据里面有整数,整数不是字符,记事本显示的是乱码,如果想保存整数类型,需要报整数转化成字符串,你可以尝试使用fprintf和fscanf来读写文件.以下是例子:在运用fprintf与fscanf时,在向文件输出数据及从文件读取数据时,分隔符应该相一致。如下程序所示,该程序的功能是:用户...

关于C语言程序保存问题
要回文件读写,实现保存在文件中,下次运行的时候先从文件初始化,省得你去输入。

C语言程序设计题如何保存
1、程序结果填写完成后,必须使用“文件”菜单中的“保存”命令,保存“blank1.c”程序文件。2、“blank1.c”程序文件保存完成后,单击窗口右上角的关闭按钮,关闭“blank1.c”程序文件,并退出“Microsoft Visual C++ 6.0”系统界面,如图所示,屏幕回到图所示界面。

C语言程序运行结果保存为TXT格式的问题
原因是因为你在循环中打开文件,不停的在从第0个位置写,再关闭 如果想放在循环中,你用到fseek(文件类型指针fp,位移量,起始点)接口,放在\/*printf("L=%f\\t %f\\n",l,a); *\/ 后面 起始点 对应的数字 代表的文件位置 SEEK_SET 0 文件开头 SEEK_CUR 1 文件当前位置 SEEK_END 2 ...

我的C语言程序为什么不能保存数据,每次退出再进入后就没有之前存的东 ...
你把打开方式改成追加试试、或许是你覆盖写入的原因 把文件的打开方式改成追加模式,就是“fopen("work".txt,"ab")”

关于C语言编程的保存问题!!!
如果扩展名是.c,那么它就是一个c语言文件.至于你的机器里看起来跟学校的不一样,那可能是学校的机器安装了vc++6.0,而你没有.文件的图标看起来怎么样是不重要的,这跟默认跟它关联的程序有关.重要的是文件实际的格式,这不会随着图标或扩展名变的.若想修改文件关联请到:控制面板|文件夹选项|文件类型...

c语言中采用二进制文件存储数据的问题
1、二进制文本使用fopen函数的二进制模式“rb”就可以打开。对于程序来说,不管后缀名如何,文件分为两种类型:文本文件和二进制文件。 C语言里有一系列文件操作函数。区分文本和二进制文件,需要在打开文件时设置不同的控制符mode的变量即可。2、fopen的函数原型:FILE * fopen(const char * path,const...

C语言数据保存问题
不知道你是用什么方法打开的?用fopen的rb模式应该可以读的.PS.写文件那里,可以不用循环,直接用 fwrite(stud, sizeof(struct student), n, point));如果你是用w模式打开的,那每次会把文件清空.

编写好一个C语言程序,如何把数据一直保存下来
用数组保存。定义一个数组。如:int a[6]={1,2,3,4,5,6};然后输出 for(i=0;i<6;i++){ printf("%d",a[i]);} 代码如下:include<stdio.h> int main(){ int a[6]={1,2,3,4,5,6};int i;for(i=0;i<=5;i++)printf("%d\\n",a[i]);} ...

C语言编的程序怎么保存到指定文件夹?谢谢```
fopen=("c:xx.txt","a+")不知道你说的什么意思,不过如果是打开文件然后写的话 把fopen后面的两个参数写上就ok 了.第一个是文件路径 底二个是打开方式,我用的是追加写,就是如果没有文件就新建一个,有就写在文件尾

相似回答