我无法在C

时间:2017-05-20 23:42:32

标签: c visual-studio

当我执行此代码时,它工作正常,但输出在" 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;。

1 个答案:

答案 0 :(得分:1)

    fwrite(&musteri, sizeof(struct musteriVerisi), 1, cfPtr);

这行代码毫无意义。您只是在内存中将一些二进制垃圾写入文件。当程序停止运行时,没有理由期望这有任何意义 - 谁知道系统用来存储信息的内部格式。

例如:

char soyisim[15];

假设它包含一个带有终止零字节的双字符串。其他13个字节包含什么?你知道吗?我也不是。那么为什么要将未知垃圾写入文件?!