2013-02-14 168 views
0

我不知道如何通過radjectives(二維數組的字符串)到randomizeadj函數。如何將二維數組的字符串傳遞給C語言的函數?

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

回答

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[][](二維數組字符)到二維數組或字符指針(還要注意數組的第一維必須始終具有指定的長度)。

  • 改變了你的函數返回char *,而不是char(否則你的函數只返回一個字符,而不是字符串(但你仍然只是return adjectives[x][y]

其他的事情我改變。

answers更改爲不是char指針的數組,而是使用char s的二維數組,否則編譯器將不會爲您試圖讀取的值分配內存。

char answers[5][100]; 

還有一個;那裏不應該在這裏:(兩種功能)

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

Test program

+0

它仍然說不兼容的指針類型我不知道我做錯了什麼。 – user2073501 2013-02-14 21:33:31

+0

它表示在我嘗試在主體中使用函數radomizeadj(radjectives)的行編譯時,不兼容的指針類型。 – user2073501 2013-02-14 21:42:22

+0

@ user2073501請參閱編輯。 – Dukeling 2013-02-14 22:39:40

0

您可以在已宣佈的方式簡單地將它傳遞:

改變你的函數定義和聲明如下:

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

注意:對於二維數組,你需要傳遞cols大小,所以按要求通過

編輯

在你的代碼中你已經把分號(; )函數確定指標
char randomizeadj(char adjectives[x][y]); { ... }
char randomizenouns(char nouns[x][y]); { .... }
remove從函數定義分號


你得到那個incompatible pointer type錯誤如前面你可能已經改變了函數聲明的簽名匹配的功能定義簽名

+0

它仍然表示不兼容的指針類型 – user2073501 2013-02-14 21:22:06