为什么在C中应用文件处理时会得到随机字符

g9icjywg  于 2022-12-03  发布在  其他
关注(0)|答案(1)|浏览(145)

我试着用fwrite把我的struct传递到一个txt文件中,但是在我尝试之后,在我的txt文件中打印的输出是随机字符。我不知道是我的文本编辑器(VS Code 1.76)还是我的设备(Mac OS)出了问题。
检查我的github代码以获得完整的代码:https://github.com/fayzulhq/file-handling-for-public/commit/fca81c7868226f9b36787d32a6d76b59bef694f1

typedef struct staff
{
    char nama[20];
    char nim[10];
} staff;

typedef struct dosen
{
    staff dsn;
    unsigned long long int gaji;
    char matkul[20];
} dosen;

//...
void insert()
{
    char nama[20], nim[10];
    int status;
    fflush(stdin);
    printf("Masukkan nama :");
    scanf("%[^\n]s", nama);
    printf("Nim :");
    scanf("%10s", nim);
    puts("\nDosen.........1\n");
    puts("Mahasiswa.....2\n");
    printf("Status :");
    scanf("%d", &status);

    if (status == 1)
    {
        FILE *fp = fopen("Dosen_kampus1.txt", "a");
        if (fp == NULL)
        {
            puts("Maaf file tidak dapat diakses!\n");
        }
        dosen new_dosen;

        char matkul[20];
        unsigned long long int gaji;
        printf("Masukkan Gaji : Rp");
        scanf("%llu", &gaji);
        fflush(stdin);
        printf("Mata kuliah : ");
        scanf("%[^\n]s", matkul);

        strcpy(new_dosen.dsn.nama, nama);
        strcpy(new_dosen.dsn.nim, nim);
        strcpy(new_dosen.matkul, matkul);
        new_dosen.gaji = gaji;

        fwrite(&new_dosen,sizeof(dosen),1,fp);

        fclose(fp);
        system("clear");
        puts("Data baru berhasil ditambahkan!\n");
    }

我希望在我的txt文件中,struct的内容能打印得整整齐齐,并能在终端上显示出来。

nue99wik

nue99wik1#

如果调用fwrite(),内存中的“原始”图像将被写入文件,而不会转换为文本。
在许多其他选择中,您可以使用此建议开始开发您的解决方案。

fprintf(fp, "nama=%s\nnim=%s\ngaji=%llu\nmatkul=%s\n", new_dosen.dsn.nama, new_dosen.dsn.nim, new_dosen.gaji, new_dosen.matkul);

如果需要,您可以将单个printf()拆分为多个,以便更好地查看和维护。

fprintf(fp, "nama=%s\n", new_dosen.dsn.nama);
    fprintf(fp, "nim=%s\n", new_dosen.dsn.nim);
    fprintf(fp, "gaji=%llu\n", new_dosen.gaji);
    fprintf(fp, "matkul=%s\n", new_dosen.matkul);

有关详细信息,请阅读系统的fprintf()文档。

相关问题