如何检查数组

时间:2017-01-08 07:58:09

标签: c arrays count

我有一个2D数组,当用户把棋子放在那里时,它包含一个X值。 2D array in C

我想用以下代码计算X值:

void tableSum(int N, int table[N][N]) {
    int row,col;
    int count = 0;

    for(row=0; row<N; row++) {
        for(col=0;col<N;col++) {
            if(table[row][col] == 'x') {
                count++;
            }
        }
    }
    printf("\nNumber of X: %d\n", count);
}

如果我将X更改为表格中的数字并尝试搜索它正在工作,那么我很确定我的问题出在'if'部分。

编辑:我在代码中更早地将int [N] [N]改为char表[N] [N],没有帮助。

EDIT2:添加了以下整个代码:

#include <stdio.h>
#define MAXPOSITION 100

int tableSize(int size) {
    printf("Set table size to: ");
    scanf("%d", &size);
    getchar();
    return size;
}

void inputPosition(int pos_size, char position[pos_size]) {
    int i;
    for (int i = 0; i < pos_size / 2; i++)
    {
        printf("%d. piece: ", i + 1);
        scanf("%2s", &position[2 * i]);
        if (position[2 * i] == 'x')
        {
            position[2 * i] = '\0';
            break;
        }
    }
}

void tableMaker(int N, char table[N][N], char positions[] ) {

    int row, col, i;

    for(row=0; row<N; row++){
        for(col=0; col<N; col++){
            table[row][col]=0;
        }
    }

    i=0;
    while(positions[i]!=0){
        col=positions[i]-'A';
        i++;
        row=positions[i]-'1';
        i++;
        table[row][col]++;
    }
}

void tableOut(int N ,char table[N][N]) {
    int row, col;

    printf("    ");
    for(col=0; col<N; col++){
      printf("%c ", col+'A');
    };
    printf("\n");

    for(row=0; row<N; row++){
        printf("%2d |", row+1);
        for(col=0; col<N; col++){
            if(table[row][col]==0){
                printf(".|");
            }else{
                printf("x|");
            }
        }
        printf("\n");
    }
}

void tableSum(int N, char table[N][N]) {
    int row, col;
    int count = 0;


    for(row=0; row<N; row++) {
        for(col=0;col<N;col++) {
            if(table[row][col] == 'x') {
                count++;
            }

        }
    }
    printf("\nNumber of X: %d\n", count);
}



int main () {
    //Set table size
    int N = tableSize(N);
    char table[N][N];
    //Ask for positions
    char positions[MAXPOSITION];
    inputPosition(sizeof(positions), positions);
    //Table functions
    tableMaker(N,table,positions);
    printf("Table:\n");
    tableOut(N,table);
    tableSum(N,table);

    return 0;
}

3 个答案:

答案 0 :(得分:2)

您的代码存在许多问题。如果我们暂时忘记它们并查看当前代码,那么我们可以尝试找出代码正在做什么。

inputPosition中,您希望将"A1B4C4x"之类的输入更改为"A1B4C4'\0'",即将x更改为零终止。

然后在这里:

i=0;
while(positions[i]!=0){
    col=positions[i]-'A';
    i++;
    row=positions[i]-'1';
    i++;
    table[row][col]++;   // <------ obs
}

您可以计算输入中每​​个电路板位置的次数。因此,如果输入为"A1A1x",则最终table[0][0]为2,所有其他条目为0。

也许你想这样做:

i=0;
while(positions[i]!=0){
    col=positions[i]-'A';
    i++;
    row=positions[i]-'1';
    i++;
    table[row][col] = 'x';
}

这会在输入位置放置'x'而不是计数。

此外,我建议您添加一些输入验证。目前,您的程序崩溃非常容易。例如,我可以将电路板大小设置为4并输入"XXXXXXx",这将使您的程序在table边界之外进行访问。

答案 1 :(得分:0)

    if (position[2 * i] == 'x')
    {
        position[2 * i] = '\0';
        break;
    }

你使用&#39; x&#39;结束输入

答案 2 :(得分:0)

我想我刚刚在社区的帮助下找到了问题。

正如我在帖子中所述,我试图找到&#39; x&#39;值,但似乎我没有将它分配给表。早些时候,我用数字填满了表格:0如果没有棋子和其他数字,如果用户放下一个棋子。

我现在使用以下代码并且它完美运行:

void tableSum(int N, char table[N][N]) {
    int row, col;
    int count = 0;


    for(row=0; row<N; row++) {
        for(col=0;col<N;col++) {
            if(table[row][col] != 0) {
                count++;
            }

        }
    }
    printf("\nNumber of X: %d\n", count);
}

如果用户试图在同一个字段上放下多个棋子,这并不重要,因为在我的代码中,每个大于0的数字都用x表示。这是一个关于如何作为初学者程序员来解决问题的一个很好的例子。谢谢你的时间!