如何在c中的函数中手动输入数组?

时间:2014-12-03 20:48:27

标签: c arrays function input

在我的代码中存在以下函数:

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);

*/

2 个答案:

答案 0 :(得分:3)

如果您有C99(或更新版本)编译器,只需执行

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

这个(int[]){ something }在C术语中被称为复合文字,并定义了一个临时对象(这里是一个包含3个元素的int数组),你可以传递给你的函数。

答案 1 :(得分: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');
}