【问题标题】:Reading and writing binary file in C用C读写二进制文件
【发布时间】:2015-05-13 11:00:14
【问题描述】:

首先,我在这里阅读:

  1. reading-binary-files-in-c
  2. binary-file-reading-writing-in-c

我正在尝试用 C 读取二进制文件。并编写了以下代码:

struct emp
{
    char name[20];
    char surname[20];
    char no[20];
    char aldigiDersKodu[20];
};
struct emp e;
***
***
***
FILE *fp;
fp = fopen("student.bin","rb+");
if(fp == NULL)
{
    fp = fopen("student.bin","wb+");
    if(fp == NULL)
    {
        printf("File is not opening.");
        exit(1);
    }
}
***
***
***
fseek(fp, 0, SEEK_END);

another = 'y';
while(another == 'y')
{
     printf("\nOgrencinin Adi: ");
     scanf("%s",e.name);
     printf("\nOgrencinin Soyadi: ");
     scanf("%s", &e.surname);
     printf("\nOgrencinin Numarasi: ");
     scanf("%s", &e.no);

     fwrite(&e, sizeof(struct emp), 1, fp);

     printf("\nYeni Ogrenci Ekle(y/n)\n");
     fflush(stdin);
     another = getche();
}
***
***
***

我正在向学生添加课程名称和课程代码(例如:数学,M1)。(相同的方法)

这个读取到二进制文件的代码:

scanf("%s", no);
rewind(fp);
while(fread(no, sizeof(struct emp), 1, fp) == 1)
{
     printf("\n%s %s %s %s", &e.name, &e.surname, e.no, &e.aldigiDersKodu);
}

当我读取二进制文件时,在控制台中看起来像这样:

我的 bin 文件如下所示:

Aytunc øA'v:A'vXÿæ¯Yalcinkaya °@ Àþ( 1,Aytunc,Yalcinkaya,M 'vÍE'v°@ ”ÿ( @ Osman øA'v:A'vXÿæ¯Villi kaya °@ Àþ( 2 ( Ìÿ( r'vô@_Ùþÿÿÿ:A'vÍE'v°@ ”ÿ( @

但我想在控制台屏幕中查看此输出:

1 Aytunc Yalcinkaya M

【问题讨论】:

  • fflush(stdin) 是未定义的行为,而您的二进制文件基本上是一个文本文件,没有太大区别,因为您只存储文本。并将'\n'放在打印行的末尾,因为它会刷新stdout,如果你把它放在行首,有些文本可能不会打印,我在windows编程教程中看到很多,但是大多数时候这没有意义。
  • while(fread(no, --> while(fread(&e, ? printf("\n%s %s %s %s", &e.name, &e.surname, e.no, &e.aldigiDersKodu); &
  • 你关闭过fp吗?为什么不编写一个非常简单的完整测试程序(将结构简化为只有一个成员)?这对你自己也有帮助。
  • @BLUEPIXY while(fread(no, --> while(fread(&e, ? printf("\n%s %s %s %s", &e.name, &e.surname, e .no, &e.aldigiDersKodu); 请解释此评论 :) 我应该删除哪一部分??
  • 例如 &e.name 更改为 e.name。

标签: c binaryfiles fread bin


【解决方案1】:

首先,当您将结构保存到文件时,您可以/必须读取结构。

while(fread(&e, sizeof(struct emp), 1, fp) == 1)

其次,您必须将指针传递给 %s 格式,然后

printf("\n%s %s %s %s", e.name, e.surname, e.no, e.aldigiDersKodu);

至少

printf("\n%s %s %s %s", &e.name[0], &e.surname[0], &e.no[0], &e.aldigiDersKodu[0]);

【讨论】:

    猜你喜欢
    • 2013-07-10
    • 2020-09-09
    • 1970-01-01
    • 1970-01-01
    • 2019-04-20
    • 2019-09-18
    • 1970-01-01
    • 2020-09-03
    • 2021-06-22
    相关资源
    最近更新 更多