2014-12-03 46 views
0

在我的代碼下面的函數存在:如何在c函數中手動輸入數組?

int Count_border(int loc[], int search[], int search_c){ 
    int count = 0, i, j; 


    for(j = -1; j < 2; j += 2){ 
     if(In_array(BOARD[loc[0] + j][loc[1]], search, search_c) == 1) count++; 
    } 
    for(j = -1; j < 2; j += 2){ 
     if(In_array(BOARD[loc[0]][loc[1] + j], search, search_c) == 1) count++; 
    } 


    return count; 
} 

在這個功能我正在尋找在陣列搜索值。這個問題如何完成並不重要。然而,我的問題是,如何輸入「手動」數組,如下所示:Count_border(con_input, {-1, 0, 1}, 3);

編譯器不允許使用此語法。我不想在函數前創建一個數組,我真的想要對它進行硬編碼。

謝謝你的幫助!

編輯:

現在我收到此錯誤:

In function 'main': 
file.c:40:1: error: expected ';' before '}' token 
} 
^ 
file.c:85:1: error: expected declaration or statement at end of input 
} 

在哪裏,這是我的全部代碼,請幫助我。

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

void Put(int letter, int number); 
void Set(int letter, int number, int who); 
void Init_board(); 
int Count_border(int loc[], int search[], int search_c); 
int In_array(int val, int arr[], int size); 

int BOARD[9][9]; // 0 = empty, 1 = me, 2 = enemy 
int STONES[2][81][9][9], STONE_COUNTER[2]; 

int main(void){ 
    char input[5]; 
    int con_input[2], t; 

    Init_board(); 
    memset(STONES, 0, sizeof(STONES)); 
    memset(STONE_COUNTER, 0, sizeof(STONE_COUNTER)); 
    scanf("%s", input); 
    if(strcmp(input,"Start") == 0){ 
     Put(4, 4); 
    } 

    scanf("%s", input); //get the first input after start 

    do{ 
     con_input[0] = input[0]-'a';  /* Convert the input */ 
     con_input[1] = input[1]; 
     Set(con_input[0], con_input[1], 2); 

     t = Count_border(con_input, (int[]){-1, 0, 1}, 3); 
     printf("%i\n", t); 

     scanf("%s", input);     /* Get the next input */ 
    } while(strcmp(input, "Quit") != 0) 


} 

void Init_board(){ 
    int i,j; 
    memset(BOARD, -1, sizeof(BOARD)); 
    for(i = 0; i < 9; i++){ 
     for(j = 0; j < 9; j++){ 
      BOARD[i][j] = 0; 
     } 
    } 
} 

void Put(int letter, int number){ 
    char t = letter + 'a'; 
    printf("%c%i\n", t, number); 
    //fflush(stdout); 
    Set(letter, number, 1); 
} 

void Set(int letter, int number, int who){ 
    BOARD[letter][number] = who; 
} 

int Count_border(int loc[], int search[], int search_c){ 
    int count = 0, i, j; 


    for(j = -1; j < 2; j += 2){ 
     if(In_array(BOARD[loc[0] + j][loc[1]], search, search_c) == 1) count++; 
    } 
    for(j = -1; j < 2; j += 2){ 
     if(In_array(BOARD[loc[0]][loc[1] + j], search, search_c) == 1) count++; 
    } 


    return count; 
} 

int In_array(int val, int arr[], int size){ 
    int i; 
    for (i=0; i < size; i++) { 
     if (arr[i] == val) 
      return 1; 
    } 
    return 0; 
} 



/* notes: 
fflush(stdout); 

*/ 

回答

3

如果你有C99(或更新)編譯器只是做

Count_border(con_input, (int[]){-1, 0, 1}, 3); 

(int[]){ something }稱爲化合物字面用C術語和定義了一個臨時對象(這裏是int陣列3種元素)你可以傳遞給你的函數。

+0

這不適用於C11嗎? – 2014-12-03 21:36:28

+0

因爲我參加比賽,所以不允許C99 – 2014-12-03 21:37:05

+0

@GenieKort:它在C99和C11中工作;它在C89/C90中不起作用,C89/C90是衆所周知的編譯器,操作系統和辦公軟件供應商提供的。 – 2014-12-03 21:53:49

1

是這樣的嗎?

#include <stdio.h> 

void f(char arr[]); 

int main(int argc, char *argv[]) 
{ 
     f((char [4]){'1', '2', '3', '5'}); 

     return 0; 
} 

void f(char arr[4]) 
{ 
     int i; 
     for (i = 0; i < sizeof(arr)/sizeof(*arr); i++) 
       printf("%c ", arr[i]); 
     putchar('\n'); 
} 
+1

你應該解釋你正在使用C99/C11複合文字。如果數組大小不是4,那麼也可以考慮代碼會發生什麼情況 - 或者您可能會將其作爲一個問題解決。 – 2014-12-03 21:08:25

+0

我以爲複合文字被使用了很長時間,很難找到他們無法工作的地方。但你是對的。至於數組大小,我不知道這是否是一個好的解決方案(請參閱更新)。你怎麼看? – 2014-12-03 21:44:36

+0

你還沒有太多與微軟的Windows編譯器有關,那麼......他們仍然不支持C99的特性,如複合文字(實際上,它們不能正確支持C99的大部分)。 – 2014-12-03 21:45:47