0

ユーザーからの入力を含む配列のすべての要素を出力しようとしています。たとえば、ユーザーが形容詞に笑顔、幸せ、悲しいを入力した場合、それをユーザーに出力したいと思います。

#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;
}

配列のデータを出力できない理由がわかりません。

4

2 に答える 2

0

配列 から印刷していますがadj、これには要素の余地しかありませんnumAdj。つまり、が 3 の場合、要素、、およびnumAdjのみにアクセスできます。ただし、最後のループは まで反復し、 is not 0の最後を過ぎます (この場合、最初の要素 のみを出力します)。adj[0]adj[1]adj[2]numAdj * numNounsadjnumNounsadj[0]

前の 2 つのループのそれぞれの行を使用して、とforを適切に繰り返します。adjnouns

さらに、adjnounsは両方とも個々のchar要素の配列です。つまり、文字列ではなく単一の文字です。それらを文字の配列の配列にする必要があります(C文字列は文字の配列であるため、C文字列の配列は文字の配列の配列です)。

于 2013-03-02T16:10:34.903 に答える
0

あなたが書いた:

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

次にやっている:

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

but&adj[counter_1]は への参照ですcharが、scanf は への参照を待機していchar *ます。違います。同じ問題がchar nouns[numNouns];配列にも存在します。これは、文字列の配列ではなく、文字の配列です。

于 2013-03-02T16:13:36.287 に答える