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日

悬赏问题

  • ¥15 救!ENVI5.6深度学习初始化模型报错怎么办?
  • ¥30 eclipse开启服务后,网页无法打开
  • ¥30 雷达辐射源信号参考模型
  • ¥15 html+css+js如何实现这样子的效果?
  • ¥15 STM32单片机自主设计
  • ¥15 如何在node.js中或者java中给wav格式的音频编码成sil格式呢
  • ¥15 不小心不正规的开发公司导致不给我们y码,
  • ¥15 我的代码无法在vc++中运行呀,错误很多
  • ¥50 求一个win系统下运行的可自动抓取arm64架构deb安装包和其依赖包的软件。
  • ¥60 fail to initialize keyboard hotkeys through kernel.0000000000