写入 txt 文件的数据以某种奇怪的语言出现[C]

data written to txt file appears in some bizzare language[C]

所以我编写了一个程序,它将接收有关 DVD 的信息 (具体来说是 postionIDkey(只是一些随机数)标题类型发行年份),并使用一个结构,它将该信息写入一个名为 "person.txt" 的 .txt 文件。我很肯定我的代码大部分都能正常工作,但是当我去测试它时,.txt 文件中收到的输出是用某种奇怪的符号语言而不是英语编写的,坦率地说,我不知道为什么会这样。任何关于为什么会发生这种情况的解释将不胜感激,谢谢:)

程序

#include <stdio.h>
#include <stdlib.h>

// a struct to read and write
struct dvd
{
    int fposition;
    int fIdKey;
    char ftitle[50];
    char fgenre[50];
    int fyear;
};

int main ()
{
    FILE *outfile;
    struct dvd input;

    // open file for writing
    outfile = fopen ("person.txt", "w");
    if (outfile == NULL)
    {
        fprintf(stderr, "\nError opend file\n");
        exit (1);
    }


    printf("Postion: ");
    scanf("%d", &input.fposition);

    printf("ID Key: ");
    scanf("%d", &input.fIdKey);

    printf("Title: ");
    scanf("%s",&input.ftitle);

    printf("Genre: ");
    scanf("%s", &input.fgenre);

    printf("Year: ");
    scanf("%d", &input.fyear);

    // write struct to file
    fwrite (&input, sizeof(struct dvd), 1, outfile);

    if(fwrite != 0)
        printf("contents to file written successfully !\n");
    else
        printf("error writing file !\n");

    // close file
    fclose (outfile);

    return 0;
}

测试运行

测试 运行 .TXT 文件中的输出

您正在将这些值写入文件:

int fposition;
int fIdKey;
char ftitle[50];
char fgenre[50];
int fyear;

但是您将整个文件显示为字符。这种方法适用于 ftitlefgenre,因为它们确实是字符……虽然因为您没有填充所有 50 个字符,所以也显示了一些丑陋的未初始化字符。这很容易修复:只需在写入文件之前用一些已知字符(例如 space)填充未使用的字符(以及空终止符),或者根本不写入未使用的字符。您可以使用 strlen() 来查找每个字符串的长度,并使用 memset() 将未使用的字符设置为可打印的众所周知的字符。

接下来,保存 int 并将其作为文本读取是有问题的。您需要确定一种格式。要么像现在一样以整数形式写入,而以整数形式读取(这意味着您需要一个特殊的程序来读取文件),或者您承诺只将文本写入文件。

最简单的可能是只向文件写入文本。您可以为此使用 fprintf(),而不是 fwrite()。您也可以将 fprintf() 用于字符数组,它会自动只写入每个字符串的“已用”部分直到空终止符,跳过所有“垃圾”字符。