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

时间:2012-11-25 15:57:35

标签: c printf scanf

写了这个程序应该能够打印出来自txt文件的所有行,但是它只打印一个,现在看了1个小时,我无法找到错误,任何帮助都会被评价! :)

1 16.07.2011 kl。 17.00 OB - FCN 2 - 0 6.965
1 17.07.2011 kl。 14.00 FCM - SIF 1 - 2 5.370
1 17.07.2011 kl。 16.00 ACH - HBK 3 - 0 2.227
1 17.07.2011 kl。 16.00 SDR - FCK 0 - 2 4.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;
 }

2 个答案:

答案 0 :(得分:1)

每行输入结束时的出勤值会导致问题。您需要将其解析为浮点数或以句点分隔的两位小数,而不仅仅是一个小数。它应该适用于下面的代码更改,假设出席率从未达到一百万:

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);
}

答案 1 :(得分:0)

感谢输入的人,我现在正在使用它,只需将出勤变量更改为双倍并且它工作正常,再次提到代码,如果有人有任何提示更聪明地写,请告诉我! :)

#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;
  }