-1

このプログラムで文字列を出力したいのですが、出力に完全な単語が表示されません(コンソールで)。この順序で単語があります:冠詞(例: "the"、"a"、"one"、"some"、"any")、名詞前置詞冠詞名詞.

関数を使用せずにその文字列を印刷すると、正常に動作します。しかし、関数を使用すると、出力が正しくありません。

長い間考えてきましたが、このような動作の理由がわかりません。このプログラムの何が問題なのか教えてください。

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

int printSentence(int number, const char *article, const char *noun, const char *verb, const char *preposition);

int main(){

    int number;

    const char *article[5] = {"the", "a", "one", "some", "any"};
    const char *noun[5] = {"boy", "girl", "dog", "town", "car"};
    const char *verb[5] = {"drove", "jumped", "ran", "walked", "skipped"};
    const char *preposition[5] = {"to", "from", "over", "on", "under"};

    srand((unsigned)time(NULL));

    /* works properly */
    printf("%s ",  article[0 + rand() % 4] );
    printf("%s ",  noun[0 + rand() % 4] );
    printf("%s ",  verb[0 + rand() % 4] );
    printf("%s ",  preposition[0 + rand() % 4] );
    printf("%s ",  article[0 + rand() % 4] );
    printf("%s\n", noun[0 + rand() % 4] );


    printf("And now I use function:\n")
    printf("Enter the number of sentences to generate (enter 1): \n");
        scanf("%d", &number);
    /* won't work properly */
    printSentence(number, *article, *noun, *verb, *preposition);


    return 0;
}

int printSentence(int num, const char *a, const char *n, const char *v, const char *p){

    int i;

    for (i = 0; i < num; i++){

        printf("%s ",  &a[0 + rand() % 4] );
        printf("%s ",  &n[0 + rand() % 4] );
        printf("%s ",  &v[0 + rand() % 4] );
        printf("%s ",  &p[0 + rand() % 4] );
        printf("%s ",  &a[0 + rand() % 4] );
        printf("%s\n", &n[0 + rand() % 4] );
    }

    return 0;
}

前:

**前:**

問題を解決した後:

ここに画像の説明を入力

4

3 に答える 3

1

int printSentence(int num, const char *a, ...

どうあるa べきですか?の配列になるはずconst char *ですよね?それが type のarticle持つものであり、これを同じにしたいのです。

したがって、次のようになります。

int printSentence(int num, const char *a[], ...

また

int printSentence(int num, const char **a, ...
于 2013-07-23T10:52:32.217 に答える