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 PADS Logic 原理图
  • ¥15 PADS Logic 图标
  • ¥15 电脑和power bi环境都是英文如何将日期层次结构转换成英文
  • ¥20 气象站点数据求取中~
  • ¥15 如何获取APP内弹出的网址链接
  • ¥15 wifi 图标不见了 不知道怎么办 上不了网 变成小地球了
  • ¥50 STM32单片机传感器读取错误
  • ¥15 (关键词-阻抗匹配,HFSS,RFID标签天线)
  • ¥15 机器人轨迹规划相关问题
  • ¥15 word样式右侧翻页键消失