TTTaeee 2022-11-08 16:12 采纳率: 75%
浏览 23
已结题

C语言二进制文件的读写操作求解答!

关于c语言中用二进制读写文件的方式
我的问题就是 键入了信息之后 使用记事本打开时会乱码是什么原因呢?
还有在这里_scanf("%s%d",stud[i].name,&stud[i].id);_ 时我到底需不需要输入中间的空格呢?如果按照一般的话 是不需要 可是如果我不在%s和%d内容中间输入空格 那么就会多输入一组数据 请问是什么原因呢?

#define SIZE 2

struct student
{
char name[10];
int id;
}stud[SIZE];

//定义函数save 向文件输出size个学生的数据
void save()
{
FILE* fp;
int i;
if ((fp = fopen("stu_dat", "wb")) == NULL)
{
printf("no!\n");
return;
}
for (i = 0; i < SIZE; i++)
{
if (fwrite(&stud[i], sizeof(struct student), 1, fp) != 1)
printf("file write error\n");
}
fclose(fp);
}

int main()
{
int i;
printf("enter data:\n");
for (i = 0; i < SIZE; i++)
{
scanf("%s%d",stud[i].name,&stud[i].id);
printf("第%d次循环输出\n", i);
}
save();
return 0;
}

img

  • 写回答

3条回答 默认 最新

  • 於黾 2022-11-08 16:26
    关注

    1.因为id的值是12,你写入是按照二进制写入的
    而你却用记事本把它当纯文本阅读,ascii码是12的字符是个非法字符,那肯定乱码呀
    2.需要加入空格,否则你输入a123,程序会认为这是一个字符串"a123",它认不出来前面的a和后面的123是应该分开的

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 11月16日
  • 已采纳回答 11月8日
  • 修改了问题 11月8日
  • 创建了问题 11月8日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部