Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 程序不会打印txt文件中的所有行_C_Printf_Scanf - Fatal编程技术网

C 程序不会打印txt文件中的所有行

C 程序不会打印txt文件中的所有行,c,printf,scanf,C,Printf,Scanf,写了这个程序,它应该能够打印出一个txt文件中的所有行,但它只打印一行,已经看了1个小时了,我找不到错误,希望有任何帮助!) 2011年7月16日,吉隆坡。17.00 OB-FCN 2-06.965 2011年7月17日,吉隆坡。14.00 FCM-应力强度因子1-2 5.370 2011年7月17日,吉隆坡。16.00 ACH-HBK 3-0 2.227 2011年7月17日,吉隆坡。16.00特别提款权-FCK 0-24.992 前4行 #include <stdio.h> #i

写了这个程序,它应该能够打印出一个txt文件中的所有行,但它只打印一行,已经看了1个小时了,我找不到错误,希望有任何帮助!)

2011年7月16日,吉隆坡。17.00 OB-FCN 2-06.965
2011年7月17日,吉隆坡。14.00 FCM-应力强度因子1-2 5.370
2011年7月17日,吉隆坡。16.00 ACH-HBK 3-0 2.227
2011年7月17日,吉隆坡。16.00特别提款权-FCK 0-24.992
前4行

#include <stdio.h>
#include <stdlib.h>
#define MAX_LINE_LGT 200
#define NAME_MAX 200
#define TEAM_MAX 200

struct team{
char name[NAME_MAX];
int five_or_more_goals;
};
typedef struct team team;

void read_data_1(const char *file_name, team teams[]){
FILE *ifp;
char team1[NAME_MAX];
char team2[NAME_MAX];
int goal1, goal2;
int dag, month, year;
double clock;
int attendance;
int round;
team local_match;

ifp = fopen(file_name, "r");

while (fscanf(ifp, "%d %d.%d.%d kl. %lf %4s - %4s %d - %d %d\n", &round, &dag, &month, &year, &clock, team1, team2, &goal1, &goal2, &attendance) == 10){
    printf("runde %d den %d %d %d klokken %.2lf, mellem %s og %s endte %d - %d %d så kampen\n", round, dag, month, year, clock, team1, team2, goal1, goal2, attendance);
    }

fclose(ifp);

   }

  int main(void) {
  team all_matches_teams[TEAM_MAX];
  read_data_1("superliga-2011-2012", all_matches_teams);

 return 0;
 }
#包括
#包括
#定义最大直线长度200
#定义名称\u最大值200
#定义团队_MAX 200
结构团队{
字符名[name_MAX];
int五个或更多目标;
};
typedef结构团队;
无效读取数据1(常量字符*文件名,团队[]){
文件*ifp;
char team1[NAME_MAX];
char team2[NAME_MAX];
int目标1,目标2;
int dag,月,年;
双时钟;
国际出席;
整数轮;
本地队比赛;
ifp=fopen(文件名,“r”);
而(fscanf(ifp、%d%d.%d kl.%lf%4s-%4s%d-%d-%d%d%d\n“,&round,&dag,&month,&year,&clock,team1,team2,&goal1,&goal2,&考勤)==10){
printf(“runde%d den%d%d%d klokken%.2lf,mellem%s og%s endte%d-%d%d såkampen\n”,圆,日,月,年,时钟,第1组,第2组,目标1,目标2,出勤率);
}
fclose(ifp);
}
内部主(空){
团队所有比赛团队[团队最大值];
阅读数据1(“超级联赛-2011-2012”,所有比赛队);
返回0;
}

您在每行输入末尾的出勤值导致了问题。您需要将其解析为一个浮点或两个由句点分隔的小数,而不仅仅是一个小数。假设出席人数从未达到100万,它应该与下面的代码更改一起工作:

int valuesRead;
int attendance;
int attend1, attend2;
[...]
while ((valuesRead = fscanf(ifp, "%d %d.%d.%d kl. %lf %4s - %4s %d - %d %d.%d\n", &round, &dag, &month, &year, &clock, team1, team2, &goal1, &goal2, &attend1, &attend2)) >= 10){
    if (valuesRead == 11)
        attendance = attend1 * 1000 + attend2;
    else
        attendance = attend1;
    printf("runde %d den %d %d %d klokken %.2lf, mellem %s og %s endte %d - %d %d så kampen\n", round, dag, month, year, clock, team1, team2, goal1, goal2, attendance);
}

感谢大家的输入,我现在可以工作了,只需将考勤变量更改为双精度,效果很好,下面是代码,如果有人有任何技巧可以更智能地编写它,一定要让我知道!)

#包括
#包括
#定义最大直线长度200
#定义名称\u最大值200
#定义团队_MAX 200
结构团队{
字符名[name_MAX];
int五个或更多目标;
};
typedef结构团队;
无效读取数据1(常量字符*文件名,团队[]){
文件*ifp;
char team1[NAME_MAX];
char team2[NAME_MAX];
int目标1,目标2;
int dag,月,年;
双时钟;
双倍出勤;
整数轮;
本地队比赛;
ifp=fopen(文件名,“r”);
而(fscanf(ifp、%d%d.%d kl.%lf%4s-%4s%d-%d-%d%lf\n“,&round,&dag,&month,&year,&clock,team1,team2,&goal1,&goal2,&attention)==10){
printf(“runde%d den%d%d%d klokken%.2lf,mellem%s og%s endte%d-%d%.3lf såkampen\n”,轮、日、月、年、时钟、第1组、第2组、目标1、目标2、出勤率);
}
fclose(ifp);
}
内部主(空){
团队所有比赛团队[团队最大值];
阅读数据1(“超级联赛-2011-2012”,所有比赛队);
返回0;
}

如果不查看您的文件,就无法判断发生了什么。实际上,甚至不是整个文件:前三行或四行就足够了。我会从格式字符串的末尾删除
\n
——它无论如何都会被跳过,最后一行可能不包含一行。fscanf第二次返回什么?啊,对不起,从文件中添加一些文本我遇到了分段错误(堆芯转储)检查scanf和printf,查看是否匹配我无法使其运行,仍然存在分段故障(堆芯转储)很高兴你能弄明白,但有一条评论:目前,如果出席人数低于1000,那么说“x”,你打印的出席人数是x.000。这就是我认为将这些值作为整数处理的原因,尽管我认为我发布的答案应该更加可靠。啊,我明白了,可以看出这可能会导致问题,但感谢上帝,没有问题出席人数在1000人以下(呵呵:)我还是c的新手,但非常感谢你的完美输入。我不确定这些限制,所以这就是我不想走极端的原因,但那太好了,我很高兴你找到了解决方案!:)
#include <stdio.h>
#include <stdlib.h>
#define MAX_LINE_LGT 200
#define NAME_MAX 200
#define TEAM_MAX 200

struct team{
char name[NAME_MAX];
int five_or_more_goals;
};
typedef struct team team;

void read_data_1(const char *file_name, team teams[]){
FILE *ifp;
char team1[NAME_MAX];
char team2[NAME_MAX];
int goal1, goal2;
int dag, month, year;
double clock;
double attendance;
int round;
team local_match;

ifp = fopen(file_name, "r");

while (fscanf(ifp, "%d %d.%d.%d kl. %lf %4s - %4s %d - %d %lf\n", &round, &dag, &month, &year, &clock, team1, team2, &goal1, &goal2, &attendance) == 10){
    printf("runde %d den %d %d %d klokken %.2lf, mellem %s og %s endte %d - %d %.3lf så kampen\n", round, dag, month, year, clock, team1, team2, goal1, goal2, attendance);
    }

fclose(ifp);

    }

  int main(void) {
  team all_matches_teams[TEAM_MAX];
  read_data_1("superliga-2011-2012", all_matches_teams);

  return 0;
  }