[英]Read/Write structure to a file in C
我正在尝试组合结构和文件。 所以,我想读取数据文件.txt.中结构的n个元素,可以有N条记录,(在我的例子中是日,月和年),然后操作这个数据,并将结果注册到另一个文件中. 你能帮我吗? 我将不胜感激。 这是我的代码
#include <stdio.h>
struct data{
int d, m, y;
};
void readN(struct data element[],int n){
FILE *data_file;
data_file = fopen("data.txt","r");
if(data_file == NULL){
fprintf(stderr, "\n Error!!!");
}
else{
while(!feof(data_file)){
fscanf(data_file,"%d %d %d", &element->d, &element->m, &element->y);
}
}
}
int compareDates (struct data d1, struct data d2)
{
if (d1.y < d2.y)
return -1;
else if (d1.y > d2.y)
return 1;
else if (d1.m < d2.m)
return -1;
else if (d1.m > d2.m)
return 1;
else if (d1.d < d2.d)
return -1;
else if (d1.d > d2.d)
return 1;
else
return 0;
}
struct data checkMax(struct data *element, int n){
struct data max = element[0];
int i;
for (i = 0; i < n; i++){
if(compareDates(max,element[i]) == -1){
max = element[i];
}
}
return max;
}
struct data checkMin(struct data *element, int n) {
struct data min = element[0];
int i;
for (i = 0; i < n; i++){
if(compareDates(min,element[i]) == 1){
min = element[i];
}
}
return min;
}
int checkLeapYear(struct data yMax, struct data yMin){
int counter = 0;
for(int i = yMin.y; i <= yMax.y; i++ ){
if((i % 4 == 0 && i % 100 != 0) || i % 400 == 0){
counter++;
}
}
return counter;
}
int main() {
struct data dd1[4];
readN(dd1,4);
struct data maximum = checkMax(dd1,4);
struct data minimum = checkMin(dd1,4);
printf("\n Data maxima %d %d %d",maximum.d,maximum.m,maximum.y);
printf("\n Data minima %d %d %d", minimum.d,minimum.m,minimum.y);
printf("\n Nr de ani bisecti : %d ", checkLeapYear(maximum,minimum));
return 0;
}
数据.txt
10 10 2001
1 1 2002
14 3 2004
18 4 2022
我的控制台
Data maxima 6422280 1986752301 4201664
Data minima 1986776256 2133694049 -2
Nr de ani bisecti : 1018905
Error!!!
readN()
只应该从文件中读取n
行,因此它不会写入数组之外。 您可以使用for
循环来执行此操作。
您的代码重复读入数组的第一个元素,因为它从不递增element
。 您可以使用循环的迭代变量作为数组索引。
在循环内,您应该检查fscanf()
的返回值以确保它能够读取所有项目。
void readN(struct data element[],int n){
FILE *data_file;
data_file = fopen("data.txt","r");
if(data_file == NULL){
fprintf(stderr, "Unable to open file\n");
return;
}
for (int i = 0; i < n; i++) {
if (fscanf(data_file,"%d %d %d", &element[i].d, &element[i].m, &element[i].y) != 3){
fprintf(stderr, "Incomplete input!!!\n");
break;
}
}
fclose(data_file)
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.