2013-03-02 3 views
0

J'essaie de sortir tous les éléments d'une entrée contenant l'entrée de l'utilisateur. Comme par exemple si l'utilisateur entre sourit, heureux et triste pour les adjectifs, je veux le renvoyer à l'utilisateur.sort tous les éléments d'un tableau - C

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

int main(void) 
{ 
    int counter_1, counter_2, counter_3, tracker; 

    printf("Enter a number of adjectives: "); 
    int numAdj; 

    scanf("%d", &numAdj); 

    printf("Enter a number of nouns: "); 
    int numNouns; 

    scanf("%d", &numNouns); 

    char adj[numAdj]; 
    char nouns[numNouns]; 

    printf("Please enter %d adjectives: \n", numAdj); 

    for (counter_1 = 0; counter_1 <= numAdj - 1; counter_1++) { 
     scanf("%s", &adj[counter_1]); 
    } 

    printf("Please enter %d nouns: \n", numNouns); 

    for (counter_2 = 0; counter_2 <= numNouns - 1; counter_2++) { 
     scanf("%s", &nouns[counter_2]); 
    } 

    for (counter_3 = 0; counter_3 <= numAdj - 1; counter_3++) { 
     printf("%s", &adj[counter_3]); 
    } 
    return 0; 
} 

Je n'arrive pas à comprendre pourquoi je ne peux pas sortir les données du tableau.

+1

Que se passe-t-il à la place? Est-ce qu'il compile? Voyez-vous une erreur d'exécution, imprime-t-elle des chaînes vides? – Alex

+0

il ne sort que la première lettre de chaque élément du tableau :( –

Répondre

0

Vous imprimez à partir du tableau adj, qui a place que pour numAdj éléments, à savoir, si numAdj est 3, vous ne pouvez éléments d'accès adj[0], adj[1] et adj[2]. Toutefois, la boucle finale itère à numAdj * numNouns, qui dépasse la fin de adj lorsque numNouns n'est pas 0 (dans ce cas, il imprime uniquement le premier élément, adj[0]). Utilisez la ligne for de chacune de vos deux boucles précédentes pour parcourir correctement adj et nouns.

En outre à la fois adj et nouns sont des tableaux d'éléments individuels char, c'est-à-dire, des caractères uniques, pas des chaînes. Vous devez en faire des tableaux de tableaux de caractères (comme les chaînes C sont des tableaux de caractères, un tableau de chaînes C est un tableau de tableaux de caractères).

+0

je l'ai fait, cependant, je reçois toujours seulement la sortie de la première lettre de l'élément ... Comment puis-je sortir le mot entier qui 'adj [0] 'contient? –

+0

@Sentrl' char adj [numAdj] [20]; 'et ensuite' scanf ("% 19s", adj [counter_1]); 'dans la boucle.Semblable pour les noms –

+0

@Sentrl: 'adj [0]' ne peut pas contenir un mot entier, seulement un seul caractère (lettre) - puisque 'adj' est un tableau de' char', chaque élément est un simple 'char'. par exemple, comme l'a montré Daniel Fischer ci-dessus – Arkku

0

que vous avez écrit:

char adj[numAdj]; 
char nouns[numNouns]; 

suivant vous font:

... 
scanf("%s", &adj[counter_1]); 
... 

mais &adj[counter_1] est fait référence à char, mais scanf attendant référence à char *. Il est faux. Le même problème existe avec le tableau char nouns[numNouns];, c'est un tableau de caractères, pas un tableau de chaînes.

+0

Donc, dans l'ensemble, vous dites que je devrais l'avoir comme 'char * adj [numAdj]'? –

+0

@Sentrl Alors vous devez toujours allouer de la mémoire à chaque 'adj [i]'. –

+0

par exemple vous pouvez faire 'char adj [numAdj] [MAXWORD]; char noms [numNouns] [MAXWORD]; ' –

Questions connexes