问题:
我需要通过控制台输入询问用户的输入数据文件名,最多100个字符。然后打开输入数据文件进行读取。然后按以下格式从输入文件(.txt)中读取数据:
名词
日期(1)小时(1)NO2(1)PM10(1)
日期(2)小时(2)NO2(2)PM10(2)
......
日期(n)小时(n)NO2(n)PM10(n)
输入说明: 1.第一行是一个正整数,表示1到10000之间的数据条目数n
2.Date的格式为:dd-mm-yyyy。例如,03-08-2047表示2047年8月3日
3.Hour是1到24之间的整数
4.NO2和PM10读数是双倍的。它们是[Hour-1]和[Hour]期间的每小时平均值。零值表示读数不可用(N.A。)
5.最后,我可以假设输入文件包含给定范围内的正确数据,因此无需验证,我需要打印处理的记录数(数据条目数)并打印NA值的数量
我的尝试:
- 所以我想检查一下我是否在datafile [] []中正确存储了字符串数组,同时通过在while循环中使用printf检查数据[] []数组的整数是否也包含正确的内容但是我在输出中得到的是无限多的" []"我不知道它们来自哪里的符号。有人可以解释这个问题吗?
- 此外,我非常感谢您帮助检查我的阵列以及对我整体计划的任何其他反馈。
#define _CRT_SECURE_NO_WARNINGS // to disable Microsoft VS warnings
#include <stdio.h> // standard i/o header file
// include also other header files you need
#include <string.h>
#define BUF 10001
#define TOT 10
int main(void) {
FILE *fptr;
char input[101], date[BUF], datefile[BUF][TOT+1];
int N, n, i=0, record=0, na=0;
int data[BUF-1][3] = { 0 };
printf("AQI Processing Final Phase");
printf("\nInput filename: ");
fgets(input, 101, stdin);
N = (int)strlen(input);
for (i; i < N; i++) {
if (input[i] == '\n') {
input[i] = '\0';
break;
}
}
fptr = fopen(input, "r");
if (fptr == NULL) {
printf("Cannot open input file ");
return 0;
}
fscanf(fptr, "%d", &n);
while (1) {
if (fscanf(fptr, "%s%d%d%d", date, &data[i][0], &data[i][1], &data[i][2]) != 4)
break;
strcpy(datefile[i], date);
if (data[i][1] == 0 && data[i][2] == 0)
na += 2;
else if (data[i][1] == 0 || data[i][2] == 0)
na += 1;
record++;
i++;
printf("%s%d%d%d", datefile[i], data[i][0], data[i][1], data[i][2]); // try to check the content of arrays
}
fclose(fptr);
printf("Read %d record(s) .", record);
printf("\nHit %d N.A.", na);
return 0;
}
的奇怪输出