c - 写入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
,但是在使用结构时如何解决这个问题?
解决方案
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);
这指示它输出除每个字符串的最后一个字符之外的所有字符。
推荐阅读
- powershell - 使用 Start-Process 运行 VBScript
- c - 为什么这个程序只打印第一个字符?
- python - 如何在 django-registration 中设置注销 url?
- javascript - 你如何制作一个非交互的复选框,并且仅在变量是时才检查?
- python - 带有列表的 For 循环
- r - 如何使用剪切函数获取列中没有值的 NA 值标签?
- node.js - 如何从查询中删除 CubeJS 默认的 Group By 子句
- jmeter - '%20/' 被添加到示例请求 URL
- elasticsearch - elasticsearch的设置主管
- json - GraphQL 到模式标记