2012-11-25 3 views
0

나는 줄이 많은 텍스트 파일을 가지고 있는데, 아픈 사본은 여기에 몇 개를 붙여 넣으면 붙여 넣을 수 있습니다.c 텍스트 파일의 각 줄에있는 숫자 조합

1 16.07.2011kl. 17.00 OB - FCN 2 - 0 6.965
1 17.07.2011 kl. 14.00 FCM - SIF 1 - 2 5.370

2 23.07.2011 kl. 17.00 SIF - BIF 0 - 1 4.173
2 23.07.2011 kl. 19.00 FCK - OB 2 - 2 14.774
3 30.07.2011 kl. 17.00 AGF-OB 2 - 2 11.312
3 30.07.2011 kl. 19.00 FCK - FCN) 2 - 0 (11.076

while (fscanf(ifp, "%d %d.%d.%d kl. %lf %4s - %4s %d - %d %lf\n", &runde, &dag, &month, &year, &clock, team1, team2, &goal1, &goal2, &attendance) == 10) 
    int prev_goal = goal1 + goal2; 
    int current; 
    if(prev_goal > current) { 
    printf("Runde %d var den mest målrige med %d mål\n", runde, prev_goal); 
    } 

내가 다른 변수에 값을 얻을 수 있지만, 어떻게 각 라운드의 결과를 추가하고 하나가에서 가장 목표를 가지고있는 볼 수 있습니까? 어떤 충고가 appriciated 것입니다! 가

+0

새로운 변수에 goal1 goal2를 추가하려고했지만 실제로 작동하지 않는 것처럼 보입니다. – Winkz

+0

작동하지 않는 코드를 표시 할 수 있습니까? –

+0

확실히 지금 추가하십시오 – Winkz

답변

0

당신은 어떤 배열해야 당신을 :) 감사합니다 당신이 목표에 읽은대로 배열에 추가 할 수 있습니다 다음

int goal1Array[] 
int goal2Array[] 
int listLength = 0; 

을 (추가하는 얼마나 많은 당신이 기록을) :

goal1Array[9] = goal1; 
listLength++; 

참고 : 일부 동적 메모리 관리가 필요합니다.

for (i = 0; i < listLength; i++) { 
    /*compare stuff*/ 
} 

이것은 당신이 메모리없이 컴파일이 점점에 어떤 노력을해야합니다 그냥 일반적인 조언이다 : C 배열 끝에 등

당신이 목록을 통해 루프를 비교할 수 조회 오류.

행운을 비네.

+0

고마워요, 내일 시험해 볼게요! :) – Winkz

+0

나 한테 좀 더 분명하게 해줄 수 있다고 생각하세요? :) – Winkz

+0

@Winkz 무엇이 도움이 필요하십니까? 나는 이것이 숙제임이 의심 스럽기 때문에 당신에게 답을주지 않을 것입니다. 그것의 아주 간단한 개념, 계속 파일을 통과하고 배열에 해답을 저장하십시오. 다음은 동적 배열에 대한 자습서입니다. http://fydo.net/gamedev/dynamic-arrays는 특정 도움말 질문을하고 답변에 추가합니다. –

1

나는 어떤 라운드가 가장 많은 목표를 가지고 있었는지, 그리고 @Ben이 제안한 것처럼 텍스트 파일을 메모리에 저장할 필요가 없다는 가정만을 할 것입니다.

그런 경우에는 이런 식으로 당신이 할 수있는 일이 :

int i, maxGoals = 0, roundWithMostGoals = 0; 

for (i = 0; fscanf(ifp, "%d %d.%d.%d kl. %lf %4s - %4s %d - %d %lf\n", &runde, &dag, &month, &year, &clock, team1, team2, &goal1, &goal2, &attendance) == 10; ++i) 
{ 
    if (maxGoals < goal1 + goal2) 
    { 
     roundWithMostGoals = runde; 
     maxGoals = goal1 + goal2; 
    } 
} 

// Edit: 
printf("The largest number of goals was %d, scored in round %d", maxGoals, roundWithMostGoals); 

이 코드는 문제을 가지고있다. 가장 많은 수의 목표를 가진 라운드가 두 개인 경우 첫 번째 것만 인쇄됩니다.

이 문제를 피하려면 두 번 반복해야하며 이상적이지 않습니다.이 모든 데이터를 메모리에로드하는 다른 제안 된 방법 중 하나를 사용하는 것이 좋습니다.

그러나, 여기에 내가이 최적이라고 생각하지 않더라도 위와 같은 수정 된 솔루션입니다 :

int i, maxGoals = 0, roundWithMostGoals = 0; 

// Find the maximum number of goals that was scored in any one round. 
for (i = 0; fscanf(ifp, "%d %d.%d.%d kl. %lf %4s - %4s %d - %d %lf\n", &runde, &dag, &month, &year, &clock, team1, team2, &goal1, &goal2, &attendance) == 10; ++i) 
{ 
    if (maxGoals < goal1 + goal2) 
    { 
     maxGoals = goal1 + goal2; 
    } 
} 

printf("The largest number of goals scored was %d.\n", maxGoals); 
printf("The largest number of goals was scored in\n"); 

// TODO: Reposition the file stream back to the beginning or close it and then reopen it again. 
// XXX Code Here XXX 

// Loop through again getting all the rounds with the maximum number of goals. 

for (i = 0; fscanf(ifp, "%d %d.%d.%d kl. %lf %4s - %4s %d - %d %lf\n", &runde, &dag, &month, &year, &clock, team1, team2, &goal1, &goal2, &attendance) == 10; ++i) 
{ 
    if (maxGoals == goal1 + goal2) 
    { 
     printf("\tRound %d\n", runde); 
    } 
} 

하지만 지금 두 번을 반복하고 확실히 당신의 문제에 대한 최선의 해결책이 아닙니다.

+0

고맙습니다.하지만 인쇄 할 때 정확한 목표가 아니라 여러 차례 발간됩니다. – Winkz

+0

어디에서 인쇄하나요? 나는 득점 한 골 수와 가장 많은 수의 득점을 인쇄하기 위해 내 포스트를 편집했습니다. – nonsensickle

+0

어쨌든 가장 많은 골을 넣은 라운드에서 첫 번째 경기에서만 골을 얻습니다. hmm – Winkz

0

각 팀에 대해 정수 int 배열을 만듭니다. 그들은 각 팀의 합계가 될 것입니다.

그러면 strcmp 팀 이름과 팀 이름이 팀 1과 팀 2입니다.그런 다음 관련된 goalSum에 목표를 추가하십시오.

int goalSum[3]; 
goalSum[0] = 0;goalSum[1] = 0;goalSum[2] = 0 


while (fscanf(ifp, "%d %d.%d.%d kl. %lf %4s - %4s %d - %d %lf\n", &runde, &dag, &month, &year, &clock, team1, team2, &goal1, &goal2, &attendance) == 10) 
{ 

    //comparisions for the first team 
    if(strcmp(team1,"nameofteam0")==0) 
    { 
      ++goalSum[0]; 
    } 
    if(strcmp(team1,"nameofteam1")==0) 
    { 
      ++goalSum[1]; 
    } 
    if(strcmp(team1,"nameofteam2")==0) 
    { 
      ++goalSum[2]; 
    } 
    //comparisions for the second team 
    if(strcmp(team2,"nameofteam0")==0) 
    { 
      ++goalSum[0]; 
    } 
    if(strcmp(team2,"nameofteam1")==0) 
    { 
      ++goalSum[1]; 
    } 
    if(strcmp(team2,"nameofteam2")==0) 
    { 
      ++goalSum[2]; 
    } 
} 

그런 다음 각 팀의 목표를 비교하십시오.

관련 문제