我做了这段代码来尝试对二维数组(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;
}
答案 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
,否则您将无法完全遍历数组。
还请注意,即使您更正了该语句,也最好检查输入x
和y
,因为如果它们大于或等于ROWS
和COLS
,而不是通过在此处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;
}