首页 > 解决方案 > 写入txt文件

问题描述

尝试写入 txt 文件时出现问题。我正在制作汽车登记簿,在向其中添加 2 辆汽车后,它在 txt 文件中看起来像这样。

BMW
 Car
 ABCD1234
 Herald
 45
Fiat
 Car
 QWER1234
 RONALD
 20

我的愿望是让它像这样在同一条线上。

BMW Car ABCD1234 Herald 45
Fiat Car QWER1234 RONALD 20

这是我的“保存”和“添加车辆”功能自动取款机。

int save(vehicle_t * v, int count)
{
    FILE * f;
    f = fopen("reg.txt", "w");
    if(f == NULL)
    {
        printf("Could not open!\n");
        return 0;
    }
    else
    {
        int i;
        for(i=0; i < count; i++)
        {
            fprintf(f, "%s %s %s %s %d\n", v[i].brand, v[i].type, v[i].reg, v[i].owner.name, v[i].owner.age);
        }
    }
    fclose(f);
}
void add_vehicle(vehicle_t *v, int count)
{
    char brand[NSIZE]; char type[NSIZE]; char reg[NSIZE]; char name[NSIZE];
    int age;
    printf("Brand: ");
    fgets(brand, NSIZE, stdin);
    strcpy(v[count].brand, brand);
    
    printf("Type of vehicle: ");
    fgets(type, NSIZE, stdin);
    strcpy(v[count].type, type);
    
    printf("Reg number: ");
    fgets(reg, NSIZE, stdin);
    strcpy(v[count].reg, reg);

    printf("Owners name: ");
    fgets(name, NSIZE, stdin);
    strcpy(v[count].owner.name, name);

    printf("Owners age: ");
    v[count].owner.age = num_check(MAX_AGE, MIN_AGE);
}

我的想法是在数组的末尾fgets添加\n,但是在使用结构时如何解决这个问题?

标签: cstruct

解决方案


fgets返回行上的所有字符,包括尾随\n. 为了fprintf避免打印\n字符,您可以将fprintf调用更改为

fprintf(f, "%*.*s %*.*s %*.*s %*.*s %d\n",
          strlen(v[i].brand)-1,      strlen(v[i].brand)-1,      v[i].brand,
          strlen(v[i].type)-1,       strlen(v[i].type)-1,       v[i].type,
          strlen(v[i].reg)-1,        strlen(v[i].reg)-1,        v[i].reg,
          strlen(v[i].owner.name)-1, strlen(v[i].owner.name)-1, v[i].owner.name,
          v[i].owner.age);

这指示它输出除每个字符串的最后一个字符之外的所有字符。


推荐阅读