天啊,我被这结构体搞到快要疯了,大家救我啊~~~~~!

sumy 2003-11-04 05:14:08
程序如下:

#include <stdio.h>
struct record
{
char name[8];
int score;
}user[10];


main()
{
int i,j;
FILE *fp;
clrscr();
for(i=0;i<10;i++)
{
strcpy(user[i].name, "ricky");
user[i].score=60;
printf ("%s %d\n",user[i].name,user[i].score);
}

fp=fopen("record.txt","wb+");
for(i=1;i<=10;i++)
{
fwrite(&user[i],sizeof(struct record),1,fp);
}
fclose(fp);


程序运行时通过"printf ("%s %d\n",user[i].name,user[i].score);"语句打印出来的结果一切正常:

ricky 60
ricky 60
ricky 60
ricky 60
ricky 60
ricky 60
ricky 60
ricky 60
ricky 60
ricky 60

但把结果写入到文件那部分却不行,record.txt的结果是:

ricky < ricky < ricky < ricky < ricky < ricky < ricky < ricky < ricky <


也就是程序输出时把60当成了字符输出了!

怎么办啊? :(

...全文
38 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
verbal 2003-11-05
  • 打赏
  • 举报
回复
修改后的代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct record
{
char name[8];
int score;
}user[10];


main()
{
int i,j;
FILE *fp;
for(i=0;i<10;i++)
{
strcpy(user[i].name, "ricky");
user[i].score=60;
printf ("%s %d\n",user[i].name,user[i].score);
}

fp=fopen("record.txt","w+");
for(i=0;i<10;i++)
{
fprintf(fp,"%s %d\n",user[i].name,user[i].score);
}
fclose(fp);
}
修改处:
1.文件使用格式"wb+"(二进制文本)改为“w+"(新的文本文件);
2.文件写的方式改为fprintf;
3.第二个循环条件改为和第一个循环条件一样。
hongfeeling 2003-11-05
  • 打赏
  • 举报
回复
用fprintf就好了
TianGuangZao 2003-11-04
  • 打赏
  • 举报
回复
carbon107(<软件开发思想.h>) 写的很对呀。
fwrite 不能带格式输出,只能作为字符处理,用 fprintf 就要强大些。
mjfsun 2003-11-04
  • 打赏
  • 举报
回复
up
iceandfire 2003-11-04
  • 打赏
  • 举报
回复
只要读出的还是60不就可以了吗?这要看你以哪头为重了,看输出结果还是看文本。
Wolf0403 2003-11-04
  • 打赏
  • 举报
回复
有关系吗?你这样写入,相应方法读出的,还是 60 啊,呵呵
sumy 2003-11-04
  • 打赏
  • 举报
回复
那怎么解决呢?我要写入的是60啊!
carbon107 2003-11-04
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <iostream>
struct record
{
char name[8];
int score;
}user[10];


void main()
{
int i;
FILE *fp;

for(i=0;i<10;i++)
{
strcpy(user[i].name, "ricky");
user[i].score=60;
printf ("%s %d\n",user[i].name,user[i].score);
}

fp=fopen("record.txt","wb+");
for(i=0;i<10;i++)
{
//fprintf( stream, "%s%c", s, c );
fprintf(fp, "%s %d",user[i].name ,user[i].score );//改成这样
}
fclose(fp);
}

为什么原来在屏幕上的60,在文件中就变成了小于号


答 :60被当做ascii处理了,对应的字符正是<
2608 2003-11-04
  • 打赏
  • 举报
回复
小于号的ascii码是60,写到文件中之后,会将60转换为相应的ascii
leyt 2003-11-04
  • 打赏
  • 举报
回复
60的ASCII码是 < 所以了
hello_wyq 2003-11-04
  • 打赏
  • 举报
回复
for(i=1;i<=10;i++)//这里数组越界了
{
fwrite(&user[i],sizeof(struct record),1,fp);
}
sumy 2003-11-04
  • 打赏
  • 举报
回复
我不时这个意思,我是问为什么原来在屏幕上的60,在文件中就变成了小于号!!!
短歌如风 2003-11-04
  • 打赏
  • 举报
回复
正文格式
短歌如风 2003-11-04
  • 打赏
  • 举报
回复
如果你想输出正方格式的信息,应该用fprintf而不是fwrite,这时你就要用fscanf去读而不是fread。

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧