2017-10-19 14 views
1

Le but de mon programme jusqu'ici est de créer 4 tableaux. 1 tableau 'char' qui va prendre dans 10 valeurs de chaîne différentes avec chaque élément ayant un maximum de 25 caractères. Et 3 autres tableaux qui prendront 10 valeurs entières et les stockent dans mon tableau. Je compile et exécute mon programme, et parcourt mes boucles for et une fois terminé, j'obtiens des valeurs entières étranges à la place de mon tableau teamName, et pour les tableaux 'teamWins' 'teamLosses' et 'teamTies', ça me donne le première valeur que j'ai entrée pour TOUS les éléments de ces tableaux. Je veux vraiment comprendre comment fonctionnent les tableaux, mais j'ai du mal à les déclarer et à les utiliser avec des entrées et des sorties. Quelqu'un peut-il voir et expliquer comment je peux prendre 10 chaînes avec des valeurs de 25 caractères dans chaque élément, et prendre 10 entiers dans les 3 autres tableaux avec des éléments de 10? Je vais joindre mon code source ci-dessous.Mon programme compile et lorsqu'il est exécuté, il ne me donne pas l'entrée que j'ai mis

#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

Vous imprimez 'teamName' au lieu de' temName [i] 'et' la dernière printf' la chaîne de format ne correspond pas aux paramètres. Est-ce que votre compilateur ne vous avertit pas à ce sujet? –

+0

Si vous utilisez 'gcc', ajoutez' -Wall -Wextra' à votre chaîne de compilation. Sur windows ('cl.exe' - VS), ajoutez'/Wall'. N'acceptez pas le code avant qu'il ne soit compilé sans avertissement. (vous pouvez utiliser '/ W4' sous windows,'/Wall' va déclencher des avertissements non-code que vous ne pouvez pas éliminer sans options de désactivation '/ wdXXX' spécifiques.) –

Répondre

1

Vous avez quatre questions:

  1. Déclarant teamName comme char * teamName[NUM_TEAM + 1][30] = { "" }; est incorrect; Si vous voulez un tableau de chaînes, il suffit de déclarer char teamName[NUM_TEAM + 1][30] = { "" }; (vous voulez un tableau 2D de chars, pas char * s).

  2. Dans fgets (teamName[NUM_TEAM], sizeof teamName[NUM_TEAM], stdin);, vous écrivez chaque nom d'équipe dans le même élément inutilisé. Au lieu de cela, utilisez fgets (teamName[i], sizeof teamName[NUM_TEAM], stdin); pour écrire à l'équipe appropriée à chaque itération. L'impression en utilisant printf("%s", teamName); est incorrecte; vous voulez imprimer chaque nom de l'équipe plutôt que de tenter d'imprimer l'adresse du tableau teamName: printf("%s", teamName[i]);

  3. Vous avez un argument supplémentaire dans printf("%i %i %i\n", teamName[i], teamWins[i], teamLosses[i], teamTies[i]);; puisque vous avez déjà imprimé teamName[i] au point 3, vous devez le supprimer dans ce printf() appel: printf("%i %i %i\n", teamWins[i], teamLosses[i], teamTies[i]);

+0

Pour 2. - mieux encore, déclarez une constante pour' 30' et l'utiliser à la place ':)' –