学习使用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;
}
答案 0 :(得分:0)
您创建了一个结构clientData
,其中包含一个整数,两个字符串和一个double。您以二进制模式打开文件,并使用fwrite()
将结构写入其中。
这意味着你正在写二进制的整数和双精度,而不是字符串,所以你看到的逻辑是正确的,你可以用fread()将文件读回一个结构,然后打印出来。
如果要创建文本文件,则应使用fprintf()
。您可以为整数和双精度值指定字段宽度,以便创建固定长度记录(这对于随机访问至关重要)。