dat 文件中的符号看起来很奇怪?

Weird looking symbols in dat file?

学习用 C 编程。使用教科书学习如何将数据随机写入随机访问文件。看起来教科书代码工作正常。然而,记事本文件中的输出是:Jones Errol Ÿru ”#e©A Jones Raphael Ÿru €€“Ü´A。 这不可能是正确的吧?你知道为什么数字不显示吗?

我不知道如何正确格式化代码。总是有人告诉我这不好。我使用 CTRL + K。在我的编译器中完全按照这本书。如果不正确,我很抱歉。也许你可以告诉我怎么做?谢谢 这是代码:

#include <stdio.h>
//clientData structure definition
struct clientData{
       int acctNum;
       char lastName[15];
       char firstName[10];
       double balance;
       };

int main (void){
    FILE *cfPtr;//credit.dat file pointer
    //create clientData with default information
    struct clientData client={0,"","",0.0};
    if ((cfPtr=fopen("c:\Users\raphaeljones\Desktop\clients4.dat","rb+"))==NULL){
         printf("The file could not be opened\n");
    } 
    else {
       //require user to specify account number
       printf("Enter account number"
              "(1 to 100, 0 to end input)\n");
       scanf("%d",&client.acctNum);

       // users enters information which is copied into file
       while (client.acctNum!=0) {
                                                                                    //user enters lastname,firstname and balance
            printf("Enter lastname,firstname, balance\n");

            //set record lastName,firstname and balance value
            fscanf(stdin,"%s%s%lf", client.lastName,
                   client.firstName, &client.balance);

            //seek position in file to user specified record
            fseek(cfPtr,
                  (client.acctNum-1)* sizeof (struct clientData),
                  SEEK_SET);

            //write user specified information in file
            fwrite(&client,sizeof(struct clientData),1,cfPtr);

            //enable user to input another account number
            printf("Enter account number\n");
            scanf("%d",&client.acctNum);
       }
       fclose(cfPtr);
   return 0;

}

您已经创建了一个结构 clientData,其中包含一个整数、两个字符串和一个双精度数。您以二进制模式打开文件,然后使用 fwrite() 将结构写入其中。

这意味着你正在用二进制而不是字符串来写整数和双精度数,所以你看到的在逻辑上是正确的,你可以用 fread() 将文件读回一个结构,然后打印它出来了。

如果你想创建一个文本文件,你应该使用fprintf()。您可以指定整数和双精度值的字段宽度,因此您可以创建固定长度的记录(这对于随机访问至关重要)。