C语言把数据写入到txt中的问题

时间:2022-01-24 01:04:12
为什么写到txt文件里的数据不是想要的?而是一堆错的数据?怎么处理?

12 个解决方案

#1


代码有bug
代码贴上来看看!

#2


引用 1 楼 max_min_ 的回复:
代码有bug
代码贴上来看看!

void Addstudent()
{
int j;
Student st[SIZE];      //重新定义一个与stud结构相同的结构体数组st
printf("请输入要添加学生的姓名:");
scanf("%s",&st[0].name);
printf("请输入要添加学生的学号:");
scanf("%s",&st[0].id);
printf("请输入要添加学生的语文成绩:");
scanf("%s",&st[0].yw);
printf("请输入要添加学生的数学成绩:");
scanf("%s",&st[0].sx);
printf("请输入要添加学生的英语成绩:");           //吧新添加的学生记录放在st[0]中
scanf("%s",&st[0].yy);
FILE *fp;
fp=fopen("3.txt","r");                       //以读的方式打开3.txt
fscanf(fp,"%*[^\n]%*c");  
i=0;
while(fscanf(fp,"%s%d%d%d%d",&stud[i].name,&stud[i].id,&stud[i].yw,&stud[i].sx,&stud[i].yy )!=EOF)
{
i++;
}                                            //从3.txt中读入数据进结构体数组stud中
fclose(fp);
int q=0;
int w=0;
for(j=1;j<i+1;j++)                          //将stud数组的数据装入st数组中
{
st[j]=stud[q];
q++;
}
fp=fopen("3.txt","w");                      //把st数据重新写入3.txt中
fprintf(fp,"姓名      学号   语文  数学  英语\n");
for(w=0;w<i+1;w++)
{ fprintf(fp,"%-6s   %2d       %d    %d     %d\n",st[w].name,st[w].id,st[w].yw,st[w].sx,st[w].yy );
}
fclose(fp);
printf("添加成功!\n"):
}

#3


代码太长只能贴上来一部分。。。。

#4


引用 3 楼 u010659346 的回复:
代码太长只能贴上来一部分。。。。


1 确定你文件是否正常打开了
2 确定你成功打开的文件写的时候是不是也是以同样的方式来写文件的?
 

#5


引用 4 楼 max_min_ 的回复:
Quote: 引用 3 楼 u010659346 的回复:

代码太长只能贴上来一部分。。。。


1 确定你文件是否正常打开了
2 确定你成功打开的文件写的时候是不是也是以同样的方式来写文件的?
 
如果不正常为什么姓名那一栏写进去的是对的,而数字那几栏都是7位的?

#6


你的各个变量的数据类型是什么啊,为什么写入和写出的格式有差别
像st[0].sx,写入是字符串输入%s,输出到文件却用%d,用int型输出
这怎么会对呢?

#7


引用 5 楼 u010659346 的回复:
Quote: 引用 4 楼 max_min_ 的回复:

Quote: 引用 3 楼 u010659346 的回复:

代码太长只能贴上来一部分。。。。


1 确定你文件是否正常打开了
2 确定你成功打开的文件写的时候是不是也是以同样的方式来写文件的?
 
如果不正常为什么姓名那一栏写进去的是对的,而数字那几栏都是7位的?


把你定义的学生类型的结构体贴上来看看!

#8


请检查scanf和fscanf的返回值!

推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。

#9


引用 7 楼 max_min_ 的回复:
Quote: 引用 5 楼 u010659346 的回复:

Quote: 引用 4 楼 max_min_ 的回复:

Quote: 引用 3 楼 u010659346 的回复:

代码太长只能贴上来一部分。。。。


1 确定你文件是否正常打开了
2 确定你成功打开的文件写的时候是不是也是以同样的方式来写文件的?
 
如果不正常为什么姓名那一栏写进去的是对的,而数字那几栏都是7位的?



把你定义的学生类型的结构体贴上来看看!

typedef struct                      //存放学生数据的结构体//
{
char name[10];
int id;
int yw;
int sx;
int yy;
int sum;
}Student;

#10


while(fscanf(fp,"%s%d%d%d%d",&stud[i].name,&stud[i].id,&stud[i].yw,&stud[i].sx,&stud[i].yy )!=EOF)
name前面那个&去掉

#11


输入部分代码改成这样

Student st[SIZE];      //重新定义一个与stud结构相同的结构体数组st
printf("请输入要添加学生的姓名:");
scanf("%s",st[0].name);
printf("请输入要添加学生的学号:");
scanf("%d",&st[0].id);
printf("请输入要添加学生的语文成绩:");
scanf("%d",&st[0].yw);
printf("请输入要添加学生的数学成绩:");
scanf("%d",&st[0].sx);
printf("请输入要添加学生的英语成绩:");           //吧新添加的学生记录放在st[0]中
scanf("%d",&st[0].yy);

#12


引用 11 楼 max_min_ 的回复:
输入部分代码改成这样

Student st[SIZE];      //重新定义一个与stud结构相同的结构体数组st
printf("请输入要添加学生的姓名:");
scanf("%s",st[0].name);
printf("请输入要添加学生的学号:");
scanf("%d",&st[0].id);
printf("请输入要添加学生的语文成绩:");
scanf("%d",&st[0].yw);
printf("请输入要添加学生的数学成绩:");
scanf("%d",&st[0].sx);
printf("请输入要添加学生的英语成绩:");           //吧新添加的学生记录放在st[0]中
scanf("%d",&st[0].yy);

谢了,问题解决了。图省事了,下面的就复制姓名那一项。。。。。。

#1


代码有bug
代码贴上来看看!

#2


引用 1 楼 max_min_ 的回复:
代码有bug
代码贴上来看看!

void Addstudent()
{
int j;
Student st[SIZE];      //重新定义一个与stud结构相同的结构体数组st
printf("请输入要添加学生的姓名:");
scanf("%s",&st[0].name);
printf("请输入要添加学生的学号:");
scanf("%s",&st[0].id);
printf("请输入要添加学生的语文成绩:");
scanf("%s",&st[0].yw);
printf("请输入要添加学生的数学成绩:");
scanf("%s",&st[0].sx);
printf("请输入要添加学生的英语成绩:");           //吧新添加的学生记录放在st[0]中
scanf("%s",&st[0].yy);
FILE *fp;
fp=fopen("3.txt","r");                       //以读的方式打开3.txt
fscanf(fp,"%*[^\n]%*c");  
i=0;
while(fscanf(fp,"%s%d%d%d%d",&stud[i].name,&stud[i].id,&stud[i].yw,&stud[i].sx,&stud[i].yy )!=EOF)
{
i++;
}                                            //从3.txt中读入数据进结构体数组stud中
fclose(fp);
int q=0;
int w=0;
for(j=1;j<i+1;j++)                          //将stud数组的数据装入st数组中
{
st[j]=stud[q];
q++;
}
fp=fopen("3.txt","w");                      //把st数据重新写入3.txt中
fprintf(fp,"姓名      学号   语文  数学  英语\n");
for(w=0;w<i+1;w++)
{ fprintf(fp,"%-6s   %2d       %d    %d     %d\n",st[w].name,st[w].id,st[w].yw,st[w].sx,st[w].yy );
}
fclose(fp);
printf("添加成功!\n"):
}

#3


代码太长只能贴上来一部分。。。。

#4


引用 3 楼 u010659346 的回复:
代码太长只能贴上来一部分。。。。


1 确定你文件是否正常打开了
2 确定你成功打开的文件写的时候是不是也是以同样的方式来写文件的?
 

#5


引用 4 楼 max_min_ 的回复:
Quote: 引用 3 楼 u010659346 的回复:

代码太长只能贴上来一部分。。。。


1 确定你文件是否正常打开了
2 确定你成功打开的文件写的时候是不是也是以同样的方式来写文件的?
 
如果不正常为什么姓名那一栏写进去的是对的,而数字那几栏都是7位的?

#6


你的各个变量的数据类型是什么啊,为什么写入和写出的格式有差别
像st[0].sx,写入是字符串输入%s,输出到文件却用%d,用int型输出
这怎么会对呢?

#7


引用 5 楼 u010659346 的回复:
Quote: 引用 4 楼 max_min_ 的回复:

Quote: 引用 3 楼 u010659346 的回复:

代码太长只能贴上来一部分。。。。


1 确定你文件是否正常打开了
2 确定你成功打开的文件写的时候是不是也是以同样的方式来写文件的?
 
如果不正常为什么姓名那一栏写进去的是对的,而数字那几栏都是7位的?


把你定义的学生类型的结构体贴上来看看!

#8


请检查scanf和fscanf的返回值!

推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。

#9


引用 7 楼 max_min_ 的回复:
Quote: 引用 5 楼 u010659346 的回复:

Quote: 引用 4 楼 max_min_ 的回复:

Quote: 引用 3 楼 u010659346 的回复:

代码太长只能贴上来一部分。。。。


1 确定你文件是否正常打开了
2 确定你成功打开的文件写的时候是不是也是以同样的方式来写文件的?
 
如果不正常为什么姓名那一栏写进去的是对的,而数字那几栏都是7位的?



把你定义的学生类型的结构体贴上来看看!

typedef struct                      //存放学生数据的结构体//
{
char name[10];
int id;
int yw;
int sx;
int yy;
int sum;
}Student;

#10


while(fscanf(fp,"%s%d%d%d%d",&stud[i].name,&stud[i].id,&stud[i].yw,&stud[i].sx,&stud[i].yy )!=EOF)
name前面那个&去掉

#11


输入部分代码改成这样

Student st[SIZE];      //重新定义一个与stud结构相同的结构体数组st
printf("请输入要添加学生的姓名:");
scanf("%s",st[0].name);
printf("请输入要添加学生的学号:");
scanf("%d",&st[0].id);
printf("请输入要添加学生的语文成绩:");
scanf("%d",&st[0].yw);
printf("请输入要添加学生的数学成绩:");
scanf("%d",&st[0].sx);
printf("请输入要添加学生的英语成绩:");           //吧新添加的学生记录放在st[0]中
scanf("%d",&st[0].yy);

#12


引用 11 楼 max_min_ 的回复:
输入部分代码改成这样

Student st[SIZE];      //重新定义一个与stud结构相同的结构体数组st
printf("请输入要添加学生的姓名:");
scanf("%s",st[0].name);
printf("请输入要添加学生的学号:");
scanf("%d",&st[0].id);
printf("请输入要添加学生的语文成绩:");
scanf("%d",&st[0].yw);
printf("请输入要添加学生的数学成绩:");
scanf("%d",&st[0].sx);
printf("请输入要添加学生的英语成绩:");           //吧新添加的学生记录放在st[0]中
scanf("%d",&st[0].yy);

谢了,问题解决了。图省事了,下面的就复制姓名那一项。。。。。。