到目前为止我的程序的目的是创建4个数组。 1'char'数组,它将接受10个不同的字符串值,每个元素最多包含25个字符。另外3个数组将采用10个整数值并将它们存储到我的数组中。我编译并运行我的程序,并循环遍历我的for循环,一旦完成,我得到一些奇怪的整数值代替我的teamName数组,对于'teamWins''teamLosses'和'teamTies'数组,它给了我我为这些数组中的所有元素输入的第一个值。我真的想了解数组是如何工作的,但我无法声明它们,并将它们与输入和输出一起使用。 任何人都可以看到并解释我如何在每个元素中使用25个字符的值来获取10个字符串,并在其他3个数组中使用10个元素的10个整数?我将在下面附加我的源代码。
#include <stdio.h>
#include <stdlib.h>
#define NUM_TEAM 10
void displayWelcome(void);
int main(void)
{
char * teamName[NUM_TEAM + 1][30] = { "" };
int teamWins[NUM_TEAM] = {0};
int teamLosses[NUM_TEAM] = {0};
int teamTies[NUM_TEAM] = {0};
int i, bestPercent, worstPercent;
displayWelcome();
//Team Name
for (i = 0; i < NUM_TEAM; i++)
{
//Prompt and enter team name
printf("Enter %i's team name: ", i + 1);
fgets (teamName[NUM_TEAM], sizeof teamName[NUM_TEAM], stdin);
//Data validation
}
//Team wins
for (i = 0; i < NUM_TEAM; i++)
{
printf("Enter wins for team number %i : ", i + 1);
scanf("%i", &teamWins[ i ]);
/*Data validation
while ( 1 != scanf("%i", & teamWins) || teamWins <= 0)
{
fflush(stdin);
printf("Enter a numerical value greater than zero: ");
}*/
}
//Team losses
for (i = 0; i < NUM_TEAM; i++)
{
printf("Enter losses for team number %i : ", i + 1);
scanf("%i", &teamLosses[ i ]);
/*Data validation
while ( 1 != scanf("%i", & teamLosses) || teamLosses <= 0)
{
fflush(stdin);
printf("Enter a numerical value greater than zero: ");
}*/
}
//Team ties
for (i = 0; i < NUM_TEAM; i++)
{
printf("Enter ties for team number %i : ", i + 1);
scanf("%i", &teamTies[ i ]);
/*Data validation
while ( 1 != scanf("%i", & teamTies) || teamTies <= 0)
{
fflush(stdin);
printf("Enter a numerical value greater than zero: ");
}*/
}
//Display Data
for (i = 0; i < NUM_TEAM; i++)/* output each word read */
{
printf("%s", teamName);
printf("wins losses ties\n");
printf("%i %i %i\n", teamName[i], teamWins[i], teamLosses[i], teamTies[i]);
}
return 0;
}
void displayWelcome(void)
{
printf("Welcome to my Football Stats\n\n");
}
答案 0 :(得分:2)
你有四个问题:
将teamName
声明为char * teamName[NUM_TEAM + 1][30] = { "" };
不正确;如果你想要一个字符串数组,只需声明char teamName[NUM_TEAM + 1][30] = { "" };
(你想要一个chars
的二维数组,而不是char *
s。
在fgets (teamName[NUM_TEAM], sizeof teamName[NUM_TEAM], stdin);
中,您将每个团队名称写入相同的未使用元素。相反,在每次迭代期间使用fgets (teamName[i], sizeof teamName[NUM_TEAM], stdin);
写入适当的团队。
使用printf("%s", teamName);
打印不正确;您想要打印每个团队名称而不是尝试打印teamName
数组的地址:printf("%s", teamName[i]);
printf("%i %i %i\n", teamName[i], teamWins[i], teamLosses[i], teamTies[i]);
中有一个额外的参数;由于您已在第3点打印teamName[i]
,因此应在此printf()
来电中将其删除:printf("%i %i %i\n", teamWins[i], teamLosses[i], teamTies[i]);