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

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

*/

最佳答案

如果你有一个 C99(或更新的)编译器就可以了

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

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

关于c - 如何在c中的函数中手动输入数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27281326/

相关文章:

javascript - 在 Javascript 中使用函数表达式而不是函数语句有什么意义?

c - 餐饮哲学家的变化

javascript - 使用 vue JS 中的索引从数组中删除项目返回意外结果

java - ClassCastException 将 Object[] 转换为 Trie.Node<V> 但不是 E[]

Javascript - 从 javascript <String,String> map 中删除元素

javascript - 如何生成两次随机数?

从数组转换为指针。我错过了什么吗?

c - 解析 iCal 文件的提示

函数定义中与 double 冲突的类型

c++ - 带有 cvfilter2d 的 opencv。我越来越黑了图片