我当前正在处理一些代码,这些代码旨在从输入文件中获取某些数据,找到平均值,然后将输出打印到单独的输出中。我并不是真的在寻找一个完整的答案,只是一个提示。我知道我必须以某种方式存储数据才能操纵它,但是我正在将数据读为字符串。这是输入:
3 11 12 05 1 8.7
3 11 11 56 143 8.6
3 11 13 01 163 8.9
3 10 18 05 1 7.3
3 10 19 01 1 7.3
2 28 01 02 2 -1.0
2 28 09 07 2 -0.5
6 10 17 00 111 18.7
我们试图根据右侧的第二个最后一个数字在右侧的最后一个数字上找到平均值。这是我到目前为止所拥有的:
#include <stdio.h>
#include <ctype.h>
int main() {
FILE* input_file = fopen("input_data.txt", "r");
if (input_file == NULL){
printf("something went wrong");
return 1;
}
FILE* output_file = fopen("station_averages_summary.txt", "w");
if (output_file == NULL){
printf("something went wrong");
return 1;
}
int month, day, hour, minute, station;
float temp;
char data[500];
while((fgets(data, 500, input_file))!= NULL) {
fscanf(input_file, "%d %d %d %d %d %f", &month, &day, &hour, &minute, &station, &temp);
fprintf(output_file, "%d, %d, %d, %d, %d, %.2fn", month, day, hour, minute, station, temp);
}
fclose(input_file);
fclose(output_file);
return 0;
}
所有这些确实是将输入打印到输出文件中。
您可以更清楚您的问题吗?您想做的计算对我来说尚不清楚。
但是,对于我所理解的,您已经具有从文件中读取的值,因此只需在fscanf
行之后和fprintf
之前添加计算即可。如果您需要文件中的所有值,则必须读取所有文件并将读取的值存储在数组中,遍历它,计算您的需求,然后存储在输出文件中。
您可以声明一个结构来表示文件的行:
struct entry {
int month, day, hour, minute, station;
float temp;
};
然后,您可以声明这些结构的数组。您将必须估计文件中的行数。
struct entry input[500]
读取文件时,您可以填写数组:
size_t counter = 0;
while(fgets(data, 500, input_file != NULL)) {
struct entry* current = input + counter;
fscanf(input_file, "%d %d %d %d %d %f", &(current->month), &(current->day), &(current->hour), &(current->minute), &(current->station), &(current->temp));
++current;
}
int size = current;
然后,您可以在数组上迭代并计算平均值。