c - 用 C 中的结构类型数组填充文件
问题描述
我需要一个带有购买清单的文件我声明了一个类型结构名称购买,它必须包含以下信息:项目、价格和购买日期,按购买日期排序的日/月/年。但它不起作用,我不知道为什么。
这是代码源:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
typedef struct Date {
int day,month,year;
} Date;
typedef struct purchase{
char item[20];
float price;
Date date_purchase;
} purchase;
void fillFile(char Name_F[30] , purchase T[30] , int N) {
FILE * P_Fichier;
P_Fichier=fopen(Name_F,"w");
int i=1;
while (i< N )
{
fprintf(P_Fichier,T[i].item);
fprintf(P_Fichier,T[i].price);
fprintf(P_Fichier,T[i].date_purchase);
i++;
}
}
解决方案
您需要在 中指定格式说明符fprintf()
,如下所示:
fprintf(P_Fichier, "%s\n", T[i].item);
fprintf(P_Fichier, "%f\n", T[i].price);
fprintf(P_Fichier, "%d/%d/%d\n", T[i].date_purchase.day, T[i].date_purchase.month, T[i].date_purchase.year);
这些也是使用 with 的典型格式说明符printf()
,因此%s
对于 string、%f
float 和%d
int。
我建议您在尝试写入文件之前检查文件是否已打开(如果文件未打开,文件指针将是NULL
)。完成数据写入后,您还需要关闭文件,例如fclose(P_Fichier);
.
此外,i
应该从 0 开始,否则你会跳过你的第一个元素。但是,由于您已经知道希望循环执行多少次,我建议您使用 for 循环,如下所示:
for (int i = 0; i < N; ++i)
把所有东西放在一起,你应该得到:
void fillFile(char Name_F[30], purchase T[30], int N) {
FILE* P_Fichier;
P_Fichier = fopen(Name_F, "w");
if (P_Fichier == NULL) {
# file failed to open
fprintf(stderr, "Unable to open %s file.\n", Name_F);
return;
}
for (int i = 0; i < N; ++i) {
fprintf(P_Fichier, "%s\n", T[i].item);
fprintf(P_Fichier, "%f\n", T[i].price);
fprintf(P_Fichier, "%d/%d/%d\n", T[i].date_purchase.day, T[i].date_purchase.month, T[i].date_purchase.year);
}
fclose(P_Fichier);
}
推荐阅读
- c# - 在 Data Grid 的最后一个 Data Column 上放置一个上下文菜单来控制 WPF 中其他列的可见性
- javascript - 如何使用角度 5 中的异步更新输入更改数组?
- javascript - 在 Firefox 中未获取复选框值但在 chrome 中有效
- javascript - TinyMCE:以编程方式在插入符号位置选择单词
- django - 完成返回渲染模板后的 Django 中间件进程视图继续到常规页面
- php - 使用 FOR LOOP 从一行中插入多行
- pandas - 将数据框发送到 Google Sheet 文档中的工作表
- mysql - SQL - 如何从 2 个表中获取相关值
- android - 未显示约束布局
- vector - 在 THREE.js 中找到垂直于两条线的向量