我的程序编译,当运行时,它不会给我输入的输入

时间:2017-10-19 22:09:04

标签: c arrays

到目前为止我的程序的目的是创建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");
}

1 个答案:

答案 0 :(得分:2)

你有四个问题:

  1. teamName声明为char * teamName[NUM_TEAM + 1][30] = { "" };不正确;如果你想要一个字符串数组,只需声明char teamName[NUM_TEAM + 1][30] = { "" };(你想要一个chars的二维数组,而不是char * s。

  2. fgets (teamName[NUM_TEAM], sizeof teamName[NUM_TEAM], stdin);中,您将每个团队名称写入相同的未使用元素。相反,在每次迭代期间使用fgets (teamName[i], sizeof teamName[NUM_TEAM], stdin);写入适当的团队。

  3. 使用printf("%s", teamName);打印不正确;您想要打印每个团队名称而不是尝试打印teamName数组的地址:printf("%s", teamName[i]);

  4. 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]);