gpt4 book ai didi

c - 我的程序应该在他们的球队名称下列出球员的分数,但打印了错误的分数。我怎样才能解决这个问题?

转载 作者:太空宇宙 更新时间:2023-11-04 02:25:01 26 4
gpt4 key购买 nike

我正在编写一个程序来记录棒球队、球员和平均成绩。它应该读入球队名称,有多少支球队,他们有多少球员,然后取球员姓名+他的球队+他的平均值。之后,当只提示球队时,它应该打印最初输入的球队,以及来自它的每个球员和他们的平均水平。但是,它的最后一部分是错误的。我的代码是:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

struct Player {
char name[50];
char teamName[50];
float battingAv;
};

int main(void)
{
int userNumber;
printf("Enter the number of teams you wish to record: ");
scanf("%d", &userNumber);
int i;
char teams[userNumber][40];
for (i = 0; i < userNumber; i++) {
char name[40];
printf("Enter the name(s) of the teams: ");
scanf("%s", &name);
strcpy(teams[i], name);
}

int q;
for (q = 0; q < userNumber; q++) {
printf("Team %d is %s\n", q + 1, teams[q]);
}

int numOfPlayers;
printf("Enter the TOTAL number of players for all teams: ");
scanf("%d", &numOfPlayers);
int j;
struct Player playersEntered[numOfPlayers];
for (j = 0; j < numOfPlayers; j++) {

printf("Enter the %d Player name, Team name, and batting average: ", j + 1);
scanf("%s %s %f", &playersEntered[j].name, &playersEntered[j].teamName, &playersEntered[j].battingAv);
}

printf("Listing of players and batting average according to team names:: \n");
int m;
for (m = 0; m < userNumber; m++) {
int n;
printf("%s-\n", teams[m]);
for (n = 0; n < numOfPlayers; n++) {
//if(playersEntered[n].teamName == teams[m])
int result = strcmp(playersEntered[n].teamName, teams[m]);
if (result == 0)
{
printf("\t%s %f\n ", playersEntered[m].name, playersEntered[m].battingAv);
}
else {
continue;
}
}
}

}

我的逻辑是最后一个循环应该通过 playersEntered,并将为该特定玩家给出的团队名称与开始时输入的团队列表进行比较,因此它只会在列出的团队下打印他们的名字.但是我的输出出错了。

我的输出应该是这样的:enter image description here

最佳答案

printf("\t%s %f\n ", playersEntered[m].name, playersEntered[m].battingAv);

-->

printf("\t%s %f\n ", playersEntered[n].name, playersEntered[n].battingAv);

最好通过不使用 m 来防止此类错误和 n (或 ilj )用于嵌套循环变量。


顺便说一句:

strcpy(teams[i], &name);

您不需要 name 的地址运算符.数组的名称自动成为其第一个元素的地址。


多次出现的模式:

int m;
for(m = 0; m < userNumber; m++) {

请在 for 中定义变量-声明:

for(int m = 0; m < userNumber; ++m) { // ...

您正在使用 int用于内存中对象的索引。正确的类型应该是 size_t ( <stddef.h> ) 保证足够大以容纳所有可能的对象大小和索引。 scanf() -格式为 "%zu" .


谈论 scanf() :

从来没有!真的从来没有!使用 "%s"没有指定 WIDTH(=要读取的最大字符数),它比提供给 scanf() 的参数中的空间少一个:

char name[40];
scanf("%39s", name);

关于c - 我的程序应该在他们的球队名称下列出球员的分数,但打印了错误的分数。我怎样才能解决这个问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52788605/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com