c组合文本文件中每行的数字
我有一个有很多行的文本文件,我会复制粘贴其中一些在这里向你展示我的工作 2011年7月16日,吉隆坡。17.00 OB-FCN 2-06.965c组合文本文件中每行的数字,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月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你需要什么帮助。我怀疑这是一个家庭作业,所以我不会给你答案。这是一个非常简单的概念,继续浏览文件并将答案存储在数组中。这是一个关于动态数组的教程,询问一个特定的帮助问题,我会将其添加到我的答案中。