2D数组和for循环

时间:2020-04-03 14:58:10

标签: c arrays loops for-loop

我做了这段代码来尝试对二维数组(2d数组)进行基本操作,但是无法打印 在屏幕上显示字母“ A”。 有人可以帮我解决这个问题吗? 谢谢

#include <stdio.h>

#define ROWS  2
#define COLS  3

int main()
{
    int x; 
    int y; 
    int i; 
    int j;
    int Field[ROWS][COLS];

    printf("Enter two values: ");
    scanf("%d %d", &x, &y);
    Field[y][x] = 1;

    for(i = ROWS - 1; i > 0; i--){
        for(j = 0; j < COLS; j++){
            if(Field[i][j] == 1){
            printf("A");
            }
        }
    }
    return 0;

}

4 个答案:

答案 0 :(得分:1)

这:for(i = ROWS - 1; i > 0; i--){无法遍历必要的数组位置,也没有清楚地向软件的未来维护者传达其确切意图。

但是,要执行您在问题描述中描述的操作,除非有令人信服的理由来设置递减索引(--),一组普通的递增(++)for循环足够,更惯用:)

for(i = 0; i < ROWS; i++)
{
    for(j = 0; j < COLS; j++)
    {
        if(Field[i][j] == 1)
        {
            printf("A");
        }
    }
}

答案 1 :(得分:1)

在外循环中

for(i = ROWS - 1; i > 0; i--){

索引的范围是(降序排列)[ROWS-1,1],因此在此循环中不处理索引0。

这样的循环最好编写以下方式

for ( i = ROWS; i != 0; i-- ){
    for(j = 0; j < COLS; j++){
        if(Field[i-1][j] == 1){
        printf("A");
        }
    }
}

在这种情况下,变量i甚至可以具有无符号整数类型,例如size_t,并且即使ROWS等于0,代码也将有效。 否则,当ROWS等于ROWS - 1时,表达式0可以产生无符号类型的最大值。

答案 2 :(得分:1)

如前所述,

i>0应该是i>=0,否则您将无法完全遍历数组。

还请注意,即使您更正了该语句,也最好检查输入xy,因为如果它们大于或等于ROWSCOLS ,而不是通过在此处Field[y][x] = 1;传递数组的边界,您的程序将导致未定义的行为。

所以我建议

    scanf("%d %d", &x, &y);
    if (x < ROWS && y < COLS)
    Field[y][x] = 1;
    else
    return 0;
//rest of your code with i>=0 in this loop for(i = ROWS - 1; i >= 0; i--)

答案 3 :(得分:0)

此代码为越界数组添加了一些保护,并显示“ A”。对您来说应该是一个很好的起点。

#include <stdio.h>

#define ROWS  2
#define COLS  3
int main()
{
    int x,y,i,j = 0;
    int Field[ROWS][COLS]; // 2 Rows 3 Column array

    printf("\nEnter row value less than %i: ",ROWS); 
    scanf("%d", &y);

    printf("\nEnter column value less than %i: ",COLS); 
    scanf("%d", &x);

    if(x >= COLS || y>= ROWS)
    {
        printf("\nOut of bounds inputs!");
        return 0;
    }

    Field[y][x] = 1;

    for(i = ROWS - 1; i > 0; i--)
    {
        for(j = 0; j < COLS; j++)
        {
            if(Field[i][j] == 1)
            {
                printf("A");
            }
        }
    }
    return 0;
}

Output