c组合文本文件中每行的数字

c组合文本文件中每行的数字,c,text-files,scanf,C,Text Files,Scanf,我有一个有很多行的文本文件,我会复制粘贴其中一些在这里向你展示我的工作 2011年7月16日,吉隆坡。17.00 OB-FCN 2-06.965 2011年7月17日,吉隆坡。14.00 FCM-SIF 1-2 5.370 2011年7月23日,吉隆坡。17.00应力强度因子-BIF 0-14.173 2011年7月23日,吉隆坡。19.00 FCK-OB 2-214.774 2011年7月30日,吉隆坡。17.00 AGF-OB2-211.312 2011年7月30日,吉隆坡。19.00 FC

我有一个有很多行的文本文件,我会复制粘贴其中一些在这里向你展示我的工作

2011年7月16日,吉隆坡。17.00 OB-FCN 2-06.965
2011年7月17日,吉隆坡。14.00 FCM-SIF 1-2 5.370

2011年7月23日,吉隆坡。17.00应力强度因子-BIF 0-14.173
2011年7月23日,吉隆坡。19.00 FCK-OB 2-214.774
2011年7月30日,吉隆坡。17.00 AGF-OB2-211.312
2011年7月30日,吉隆坡。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);
   }
我将这些值放入不同的变量中,但是如何将每一轮的结果相加,看看哪一轮的目标最多?任何建议都将不胜感激!
谢谢:)

您应该制作一些数组:

int goal1Array[]
int goal2Array[]
int listLength = 0;
然后,当您阅读目标时,可以将其添加到数组中(确保记录要添加的数量):

注意:您需要进行一些动态内存管理。查找c数组等

最后,您可以循环浏览此列表以进行比较:

for (i = 0; i < listLength; i++) {
    /*compare stuff*/
}
for(i=0;i
这只是一些一般性的建议,您需要付出一些努力来编译它,而不会出现内存错误


祝你好运。

我假设你只关心哪一轮目标最多,而不需要像@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);
inti,maxGoals=0,roundWithMostGoals=0;
对于(i=0;fscanf(ifp,“%d%d.%d.%d kl.%lf%4s-%4s%d-%d%d%lf\n”、&runde、&dag、&month、&year、&clock、team1、team2、&goal1、&goal2、&attention)==10;+i)
{
如果(最大目标<目标1+目标2)
{
roundWithMostGoals=runde;
最大目标=目标1+目标2;
}
}
//编辑:
printf(“最大进球数为%d,在第%d轮中得分”,最大进球数,最多进球数);
此代码确实有问题。如果有两轮进球最多,则只打印第一轮

为了避免这种情况,我们需要循环两次,这是不理想的,我建议使用其他建议的方法之一,将所有这些数据加载到内存中

然而,这里有一个修改后的解决方案,类似于上面的解决方案,尽管我认为它不是最优的:

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);
    }
}
inti,maxGoals=0,roundWithMostGoals=0;
//找出任何一轮得分的最大进球数。
对于(i=0;fscanf(ifp,“%d%d.%d.%d kl.%lf%4s-%4s%d-%d%d%lf\n”、&runde、&dag、&month、&year、&clock、team1、team2、&goal1、&goal2、&attention)==10;+i)
{
如果(最大目标<目标1+目标2)
{
最大目标=目标1+目标2;
}
}
printf(“得分最多的是%d.\n”,maxGoals);
printf(“在\n中进球最多”);
//TODO:将文件流重新定位到起始位置,或关闭文件流,然后重新打开。
//这里是XXX代码XXX
//再次循环,以最大目标数获得所有回合。
对于(i=0;fscanf(ifp,“%d%d.%d.%d kl.%lf%4s-%4s%d-%d%d%lf\n”、&runde、&dag、&month、&year、&clock、team1、team2、&goal1、&goal2、&attention)==10;+i)
{
如果(maxGoals==goal1+goal2)
{
printf(“\t命令%d\n”,runde);
}
}

但是现在这个循环两次,肯定不是解决问题的最佳方法。

为每个团队创建一个int数组,其中包含一个int。它们将是每个团队的总数

    const int numberOfTeams = 3;
    int winningTeam=0;

//You'll have to do the support for draws yourself.
    for(int i = 0; i<numberOfTeams; ++i)
    {
        if(sumOfGoal[i]>sumOfGoal[i+1])
        {
                winningTeam = i+1;
        }
        else
        {
                winningTeam = i+2;
        }
    }
    printf("Team%i wins!\n", winningTeam);
然后,将team1和team2的名称与您的团队名称一起显示。然后,将目标添加到其关联的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];
    }
}
然后,比较每个团队的目标

    const int numberOfTeams = 3;
    int winningTeam=0;

//You'll have to do the support for draws yourself.
    for(int i = 0; i<numberOfTeams; ++i)
    {
        if(sumOfGoal[i]>sumOfGoal[i+1])
        {
                winningTeam = i+1;
        }
        else
        {
                winningTeam = i+2;
        }
    }
    printf("Team%i wins!\n", winningTeam);
const int numberOfTeams=3;
int winningTeam=0;
//你必须为自己提供支持。
对于(整数i=0;整数i+1)
{
winningTeam=i+1;
}
其他的
{
winningTeam=i+2;
}
}
printf(“团队%i获胜!\n”,winningTeam);

尝试将goal1-goal2添加到一个新变量中,但似乎无法使其真正起作用。您可以显示非工作代码吗?Danmark,ikke sant?见下文@Nonsesical的答案。Jo,ja men den virker sku ikke helt:(谢谢你,但是当我打印出来的时候,我得到的是几轮,而不是确切的进球数。你从哪里打印?我编辑了我的帖子,以打印进球最多的进球数和发生在哪一轮。不知怎的,我只从这一轮进球最多的第一场比赛中获得进球。嗯,据我所知,你在重复rounds。请您更详细地解释一下,您的数据实际上代表了什么?它将是相同的构造,但会在不同的部分进行迭代以进行匹配。谢谢,明天将试用它!:)@Winkz你需要什么帮助。我怀疑这是一个家庭作业,所以我不会给你答案。这是一个非常简单的概念,继续浏览文件并将答案存储在数组中。这是一个关于动态数组的教程,询问一个特定的帮助问题,我会将其添加到我的答案中。