在dat文件中奇怪的符号?

时间:2015-06-07 22:53:46

标签: notepad randomaccessfile missing-symbols

学习使用C编程。使用教科书了解如何随机将数据写入随机访问文件。看起来教科书代码工作正常。但是,记事本文件中的输出是:JonesErrolŸru“#e©A JonesRaphaelŸ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;

}

1 个答案:

答案 0 :(得分:0)

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

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

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