我正在开发一个C程序,该程序可以存储您需要执行的任务。现在,我正在尝试创建一个分组系统,以对您需要执行的任务进行分组。
该程序读取“ input.txt”文件。您必须先编写要输入的任务数,然后下一行采用这种格式。 {YYYYMMDD HHMM(重要性1〜10)(组0〜4)(标题)(子标题)}。例如:20181101 0530 5 1计算机编码。
但是问题在于,现在我需要以这种格式列出每个组中有多少个任务。 {(group0中的任务)(group1)(group2)(group3)(group4)}。因此,当组0中有4个任务,组2中有2个任务,组4中有1个任务时,它会打印出“ 4 0 2 0 1”。
我正在处理的代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct Tasks{
int date;
int time;
int i;
int group;
char title[127];
char sub[127];
};
struct Groups{
int gr0;
int gr1;
int gr2;
int gr3;
int gr4;
};
int main(){
FILE *file;
int num;
int j;
struct Tasks task[num];
struct Groups group;
file = fopen("input.txt", "r+");
fscanf(file, "%d", &num);
rewind(file);
for(j=0;j<num;j++){
fscanf(file, "%d %d %d %d %s %s\n",
&task[j].date, &task[j].time, &task[j].i, &task[j].group,
&task[j].title, &task[j].sub);
}
for(j=0;j<num;j++){
switch(task[j].group){
case 0:
group.gr0 = group.gr0 + 1;
break;
case 1:
group.gr1 = group.gr1 + 1;
break;
case 2:
group.gr2 = group.gr2 + 1;
break;
case 3:
group.gr3 = group.gr3 + 1;
break;
case 4:
group.gr4 = group.gr4 + 1;
break;
}
}
printf("%d %d %d %d %d",
group.gr0, group.gr1, group.gr2,
group.gr3, group.gr4);
return 0;
}
最佳答案
您正在将文件中的第一个数字读入num
,然后尝试读取此次数的输入。对我来说,这似乎是您输入的内容以存在的项目数开头,然后列出了每个项目。
但是,您正在调用rewind()
,您已经读取了num
的值,然后继续读取输入。您可能知道,rewind()
带您回到文件的开头。这意味着,在您尝试读取第一个项目的那一刻,您实际上正在读取第一个项目以及第一个项目的数量,并且您的输入处理将被取消。
您可能需要删除rewind()
调用。