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()
。您可以指定整数和双精度值的字段宽度,因此您可以创建固定长度的记录(这对于随机访问至关重要)。
学习用 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()
。您可以指定整数和双精度值的字段宽度,因此您可以创建固定长度的记录(这对于随机访问至关重要)。