在C中不打印任何内容
我正在开发一个C程序,它可以存储您需要执行的任务。现在,我正在尝试建立一个分组系统,对您需要完成的任务进行分组 程序读取“input.txt”文件。你必须先写下你想输入多少任务,然后下一行就是这个格式。{YYYYMMDD HHMM(重要性1~10)(第0~4组)(标题)(副标题)}。例如:20181101 0530 5 1计算机编码 但问题是,现在我需要以这种格式列出每组中有多少任务。{(第0组中的任务)(第1组)(第2组)(第3组)(第4组)}。因此,当第0组有4项任务时,第2组有2项任务时,第4组有1项任务时,它会打印出“4 0 2 0 1” 我正在编写的代码:在C中不打印任何内容,c,C,我正在开发一个C程序,它可以存储您需要执行的任务。现在,我正在尝试建立一个分组系统,对您需要完成的任务进行分组 程序读取“input.txt”文件。你必须先写下你想输入多少任务,然后下一行就是这个格式。{YYYYMMDD HHMM(重要性1~10)(第0~4组)(标题)(副标题)}。例如:20181101 0530 5 1计算机编码 但问题是,现在我需要以这种格式列出每组中有多少任务。{(第0组中的任务)(第1组)(第2组)(第3组)(第4组)}。因此,当第0组有4项任务时,第2组有2项任务时,
#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;
}
#包括
#包括
#包括
结构任务{
国际日期;
整数时间;
int i;
int组;
字符标题[127];
char-sub[127];
};
结构组{
int-gr0;
int gr1;
int gr2;
int gr3;
int gr4;
};
int main(){
文件*文件;
int-num;
int j;
结构任务任务[num];
结构组;
file=fopen(“input.txt”,“r+”);
fscanf(文件“%d”和&num);
倒带(文件);
对于(j=0;j您正在将文件中的第一个数字读取到num
中,然后尝试读取输入此次数。在我看来,这似乎是您的输入从存在的项目数开始,然后列出每个项目
但是,您正在调用rewind()
一个您已经读取了num
的值的函数,然后继续读取输入。您可能知道,rewind()
返回到文件的开头。这意味着在您尝试读取第一项时,您实际上读取的是项目数以及第一项,您的输入处理将偏离轨道
您可能需要删除revind()
调用。对代码进行了一些修改并对修改进行了注释。如果可以,可能还有一些漏洞
顺便说一句,你不应该使用VLA。它们在C99之后是可选的,不能依赖于可用性
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.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;
//RO access
file = fopen("input.txt", "r");
if(!file){
perror("");
return 1;
}
fscanf(file, "%d", &num);
struct Tasks task[num];
//Init the struct so you dont have random garbage values
struct Groups group = {0};
//Need to move that up so you get a valid content for num in your task definition.
//file = fopen("input.txt", "r+");
//fscanf(file, "%d", &num);
// Can't rewind, you will be reading num again
//rewind(file);
for(j=0;j<num;j++){
//Last two arguments automatically decay to a pointer, & is wrong.
if(6 != 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)){
printf("Error on reading file!\n");
fclose(file);
return 1;
}
}
//Don't forget to close it
fclose(file);
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;
}
#包括
#包括
#包括
#包括
结构任务{
国际日期;
整数时间;
int i;
int组;
字符标题[127];
char-sub[127];
};
结构组{
int-gr0;
int gr1;
int gr2;
int gr3;
int gr4;
};
int main(){
文件*文件;
int-num;
int j;
//反渗透通道
file=fopen(“input.txt”,“r”);
如果(!文件){
佩罗尔(“”);
返回1;
}
fscanf(文件“%d”和&num);
结构任务任务[num];
//初始化结构,这样就不会有随机垃圾值
结构组组={0};
//需要将其向上移动,以便在任务定义中获得num的有效内容。
//file=fopen(“input.txt”,“r+”);
//fscanf(文件“%d”和&num);
//无法倒带,您将再次读取num
//倒带(文件);
对于(j=0;j对于您的程序,您无需添加revind()
函数。由于num
的值是文件中的第一个元素,因此文件的其余部分包含有关组和任务的数据
#include <stdio.h>
#include <string.h>
` #include <stdlib.h`>
#include <errno.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;
file = fopen("input.txt", "r");
if(!file){
perror("");
return 1;
}
fscanf(file, "%d", &num);
struct Tasks task[num];
struct Groups group = {0};
//scanning rest of the file (from line 2 on wards)
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);//
}
fclose(file);
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;
}
input.txt contains
#包括
#包括
`#包括
#包括
结构任务{
国际日期;
整数时间;
int i;
int组;
字符标题[127];
char-sub[127];
};
结构组{
int-gr0;
int gr1;
int gr2;
int gr3;
int gr4;
};
int main(){
文件*文件;
int-num;
int j;
file=fopen(“input.txt”,“r”);
如果(!文件){
佩罗尔(“”);
返回1;
}
fscanf(文件“%d”和&num);
结构任务任务[num];
结构组组={0};
//扫描文件的其余部分(从第2行开始)
对于(j=0;jstruct-Groups-group;
==>struct-Groups-group={0};
您向我们展示的代码有什么问题?请详细说明。请阅读相关内容,以及。对一个可能的问题的提示:未初始化的局部变量实际上是未初始化的,它们将具有不确定的(似乎是随机的)属性值。现在考虑一下这一点,以及在初始化之前如何使用,例如,num
。另一个问题是,你没有检查什么,所以你不会知道错误。而且,由于某种原因,你会在读取文件时出错,因为你将文件倒回起始位置,然后再次读取num
的值。哦,天哪,非常感谢H