当我执行此代码时,它工作正常,但输出在" kredi.txt"没有正确显示。例如,当我为" hesapNo"输入1时,为#34; soyisim"输入白色,为#34; isim"输入白色,为" bakiye"输入20.50,输出" kredi.txt"看起来像这样:
[ stone white ÌÌÌÌÌÌ €4@]
为什么呢?这是我的代码:
#include<stdio.h>
#include<conio.h>
struct musteriVerisi
{
int hesapNo;
char soyisim[15];
char isim[15];
double bakiye;
};
int main() {
FILE *cfPtr;
struct musteriVerisi musteri = { 0," "," ",0.0 };
if ((cfPtr = fopen("kredi.txt", "r+")) == NULL)
printf("DosyaAcilamadi\n");
else {
printf("HesapNo girin:"
"(1 den 100 e kadar cikis icin 0 girin)");
scanf("%d", &musteri.hesapNo);
while (musteri.hesapNo != 0) {
printf("soyisim,isim,bakiye giriniz:\n?");
fscanf(stdin, "%s%s%lf", musteri.soyisim, musteri.isim, &musteri.bakiye);
fseek(cfPtr, (musteri.hesapNo - 1) * sizeof(struct musteriVerisi), SEEK_SET);
fwrite(&musteri, sizeof(struct musteriVerisi), 1, cfPtr);
printf("HesapNo girin:\n?");
scanf("%d", &musteri.hesapNo);
}
fclose(cfPtr);
}
getchar();
return 0;
}
我研究的书中包含此示例的章节的主题是&#34;将数据写入随机访问文件&#34;。
答案 0 :(得分:1)
fwrite(&musteri, sizeof(struct musteriVerisi), 1, cfPtr);
这行代码毫无意义。您只是在内存中将一些二进制垃圾写入文件。当程序停止运行时,没有理由期望这有任何意义 - 谁知道系统用来存储信息的内部格式。
例如:
char soyisim[15];
假设它包含一个带有终止零字节的双字符串。其他13个字节包含什么?你知道吗?我也不是。那么为什么要将未知垃圾写入文件?!