首页 > 解决方案 > 在 C 中不打印任何内容

问题描述

我正在开发一个可以存储您需要执行的任务的 C 程序。现在,我正在尝试创建一个分组系统,将您需要执行的任务分组。

程序读取“input.txt”文件。你必须先写下你想输入多少个任务,然后下一行就是这种格式。{ YYYYMMDD HHMM (Importance 1~10) (Group 0~4) (Title) (SubTitle) }. 例如像这样:20181101 0530 5 1 计算机编码。

但问题是现在我需要以这种格式列出每个组中有多少任务。{ (group0 中的任务) (group1) (group2) (group3) (group4) }。因此,当group0 中有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;
}

标签: c

解决方案


您正在将文件中的第一个数字读入num,然后尝试读取此次数的输入。对我来说,这看起来好像您的输入以存在的项目数开始,然后列出每个项目。

但是,您正在调用rewind()一个您已读取其值num然后继续读取输入的人。您可能知道,rewind()带您回到文件的开头。这意味着在您尝试读取第一项时,您实际上正在读取项的数量以及第一项,并且您的输入处理将偏离正轨。

您可能需要删除rewind()呼叫。


推荐阅读