0

radjectives(文字列の 2D 配列) をrandomizeadj関数に渡す方法がわかりません。

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

char randomizenouns(char[][]);
char randomizeadj(char[][]);

int main() // beginning of program.
{
  int a=0, b=0;
  char *answers[5]={'\0'};
  char *rnouns[3][10]={'\0'};
  char *radjectives[2][17]={'\0'};
  char *rcolors[11]={'\0'};

  radjectives[0][0]="intriguing";
  // ...
  radjectives[1][6]="loud";

  rnouns[0][0]="puppies";
  // ...
  rnouns[1][9]="people";

  rcolors[0]="black";
  // ...
  rcolors[10]="orange";

  { srand(time(NULL));

  printf("\n\tProgram Paragrahs\n");
  printf("\tFor this program you will answer several questions which will then be used to     conjure a random story the length of a paragraph.Please Keep your answers clean.Enjoy\n");

  printf("\nWhat is your name?");
  scanf("%s\n",answers[0]);
  printf("\nWhat is your favorite book?");
  scanf("%s",answers[1]);
  printf("\nWhat is your favorite color?");
  scanf("%s",answers[2]);
  printf("\nWhat city do you live in?");
  scanf("%s",answers[3]);
  printf("\nWhat car do you drive?");
  scanf("%s",answers[4]);

ここで迷子radjectivesになります。配列をrandomizeadj関数に渡す方法がわかりません。

  printf("%s gets lost in their %s %s.\n",answers[0],randomizeadj(radjectives[a][b]),answers[1]);
  printf("%s loves to play with %s %s.\n",answers[0],rcolors[(rand()    %11)],randomizenouns(rnouns[a][b]);.
  printf("%s lives in a(n) %s %s.\n",answers[0],randomizeadj(radjectives[a][b]),answers[3]);
  printf("While living in %s %s drives a(n) %s %s.\n",answers[3],answers[0],rcolors[(rand() %11)],answers[4]);
  printf("%s is a(n) %s person who likes the color  %s.\n",answers[0],randomizeadj(radjectives[a][b]),answers[2]);
} // end of program

char randomizenouns(char nouns[x][y]);
{
     int x=(rand() %3);
     int y=(rand() %10);

     char randomnoun= nouns[x][y];

     return randomnoun;
}

char randomizeadj(char adjectives[x][y]);
{
     int x=(rand() %2);
     int y=(rand() %7);

     char randomadjective= adjectives[x][y];

     return randomadjective;
}
4

2 に答える 2

0

単に

randomizeadj(radjectives);

例えば

char *adj = randomizeadj(radjectives);
printf(adj);

現時点ではコンパイルされないので、関数の宣言と定義の両方を次のように変更します。

char *randomizenouns(char *nouns[3][10]);
char *randomizeadj(char *adjectives[2][17]);

また:

char *randomizenouns(char *nouns[][10]);
char *randomizeadj(char *adjectives[][17]);

私が変更したもの:

  • char[][](文字の2D配列)を2D配列または文字ポインターに変更しました(配列の最初の次元には常に長さを指定する必要があることに注意してください)。

  • char *関数をではなく返すように変更しましたchar(そうでない場合、関数は文字列ではなく単一の文字を返します(ただし、それでもreturn adjectives[x][y])。

私が変更した他のもの:

answersポインタの配列ではcharなく、sの2D配列に変更されましcharた。そうしないと、コンパイラは、読み込もうとしている値にメモリが割り当てられません。

char answers[5][100];

;ここにあるべきではない場所もあります:(両方の機能について)

char randomizeadj(char adjectives[x][y]);
{
  ...

テストプログラム

于 2013-02-14T20:52:34.483 に答える
0

宣言した方法で渡すことができます。

関数の定義と宣言を次のように変更します。

 char *randomizenouns(char *nouns[rows][cols]) 
 char *randomizeadj(char *adjectives[rows][cols])

:2D配列の場合cols、サイズを渡す必要があるため、必要に応じて渡します

編集

そしてあなたのコードであなたは関数定義にセミコロン(;)を入れました関数定義
char randomizeadj(char adjectives[x][y]); { ... }
char randomizenouns(char nouns[x][y]); { .... }
からセミコロンを削除します


以前のように、一致する関数定義シグニチャで関数宣言シグニチャを変更していない可能性があるため、このincompatible pointer typeエラーが発生していました。

于 2013-02-14T20:54:15.010 に答える