2012-11-25 2 views
0

txt 파일에서 모든 줄을 인쇄 할 수 있어야하는이 프로그램을 작성했습니다. 단 하나만 인쇄하고 1 시간 동안 보았지만 실수는 없습니다. 도움이 appriciated 것입니다! :)txt 파일에서 모든 줄 인쇄 프로그램이 없습니다

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; 
} 
+1

파일을 보지 않고 진행 상황을 알리는 것은 불가능합니다. 사실, 전체 파일조차도 처음 3 ~ 4 줄이면 충분합니다. – dasblinkenlight

+2

포맷 문자열의 끝에서'\ n'을 제거합니다. 어쨌든 건너 ​​뛸 것이고, 마지막 줄에는 형식 문자열이 없을 수도 있습니다. – dasblinkenlight

+0

fscanf가 두 번째로 반환하는 것은 무엇입니까? –

답변

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

세그먼트 화 오류가 발생했습니다 (코어 덤프) scanf와 printf를 확인한 후 일치하는지 확인하십시오. – Winkz

+0

코어가 덤프 된 세그먼트 화 오류가 실행될 수없는 것처럼 보입니다. – Winkz

0

감사는 heres는 잘 작동 : 그것은 출석 만에 도달하지 가정, 아래의 코드 변경과 함께 작동합니다 코드를 다시 작성하십시오. 누군가가 더 스마트하게 작성하는 팁을 가지고 있다면 알려주세요! :)

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

당신이 그것을 알아 낸 것만으로도 기쁘다. 하나의 코멘트 : 참석자가 1000 이하의 값이면 'x'라고 말하면 인쇄 된 출석은 x.000이다. 그것이 정수로 값을 처리 할 생각이었습니다. 비록 게시 된 답변이 더욱 강력 해져야한다고 생각합니다. –

+0

아, 내가 볼 수있는 문제를 일으킬 수 있지만 출석이 1000 hehe 아래에 신의 theres 감사 :) 아직 메신저,하지만 당신의 입력을 많이 해줘서 고마워요 – Winkz

+0

오 완벽한. 제약 조건에 대해 확신 할 수 없었기 때문에 나는 선외로 나가고 싶지 않았습니다.하지만 대단한데, 당신이 해결책을 가지고있어서 기쁩니다! :) –