1

我需要帮助将文本文件转换为 C 的二进制文件。即使我已经写了一半,我也无法继续执行我的程序,因为我不知道是否正在打印任何值。转换需要人或动物的最大值、宽度、长度和字符串。基本上我正在编写的程序读取二进制数据库文件并返回所有满足搜索的值。谢谢您的帮助

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

typedef struct{
int max;
double length, width;
char people;
} max_t;

int 
main()
{
FILE *database;
int inp, out;

        database = fopen("database.txt", "r");
    fscanf(database, "Max : %d", &max);
    fscanf(database, "Width : %lf", &width);
    fscanf(database, "Length : %lf", &length);
    fscanf(database, "People : %s", &people);
    fwrite(&max, 1, sizeof(max), database);
    fwrite(&width, 1, sizeof(width), database);
    fwrite(&length, 1, sizeof(length), database);
    fwrite(&people, 1, sizeof(people), database);
        database = fopen("out.txt", "wb");

return(0);
}
4

2 回答 2

1

你犯了一些愚蠢的错误。您没有在输出文件中写入任何内容,而是写入输入文件,以“只读”模式打开!

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

typedef struct s{
int max;
double length, width;
char people[10];
} max_t;

int main()
{
    FILE *database, *out;
    //int inp, out;
    max_t inp;
    database = fopen("database.txt", "r");
    out = fopen("out.txt", "wb");
    fscanf(database, "Max : %d", &inp.max);
    fscanf(database, "Width : %lf", &inp.width);
    fscanf(database, "Length : %lf", &inp.length);
    fscanf(database, "People : %s", inp.people);
    fwrite(&inp.max, 1, sizeof(inp.max), out);
    fwrite(&inp.width, 1, sizeof(inp.width), out);
    fwrite(&inp.length, 1, sizeof(inp.length), out);
    fwrite(inp.people, 1, sizeof(inp.people), out);    
    fclose(database);
    fclose(out);
    return(0);
}

编辑:见 main() 和结构

于 2013-04-23T03:18:22.240 回答
0

如果您只需将数据以二进制格式放入文件中,然后再将其读取,您可以将原始字节转储到带有 in 的文件fwritestdio.h

要读入该数据,您可以使用fread.

当您使用frwite将字节放入文件时,您只需要记住当您稍后读回它们时哪些字节代表什么。

示例 txt 文件:

width  : 2
height : 3

3 1
2 3
2 1

您可以使用几个 fscanf 调用来读取 2 和 3:

// fp -- FILE * -- file pointer
fscanf( fp, "width  : %d", &width );
fscanf( fp, "height : %d", &height );

然后以二进制格式写入这些值,您可以执行以下操作:

frwite( &width,  1, sizeof( width  ), fp );
frwite( &height, 1, sizeof( height ), fp );

读取文件的其余部分并将其转换为二进制格式到另一个文件将是相同的过程。

于 2013-04-23T00:58:46.237 回答