C 二维数组

5
我将为您提供以下代码的翻译和帮助...我的问题在有注释/*This line*/的那一行。我使用了变量y和x:y表示高度,x表示宽度。第一次运行程序时,代码是scanf("%d,%d", &y, &x);,但不幸的是,程序无法正常运行。但当我使用scanf("%d,%d", &x, &y);修改代码后,程序就可以顺利运行了。我无法理解这是怎么发生的,因为我已经将y设置为高度,x设置为宽度了?
   File   Edit   Run   Compile   Project   Options   Debug   Break/watch
╒════════════════════════════════════ Edit ════════════════════════════════════╕
│      Line 1     Col 43  Insert Indent Tab Fill Unindent * C:NONAME.C         │
│#define HEIGHT 5                                                              │#define WIDTH 10                                                              │
│                                                                              │
│char enemy[HEIGHT][WIDTH]=                                                    │
│        { {0,0,0,0,0,0,0,0,0,0},                                              │
│          {0,1,1,0,0,1,0,0,0,0},                                              │
│          {0,0,0,1,0,1,0,1,1,0},                                              │
│          {0,0,0,0,0,0,0,0,1,1},                                              │
│          {0,0,1,1,0,1,0,0,0,1} };                                            │
│                                                                              │
│main()                                                                        │
│{                                                                             │
│        char friend[HEIGHT][WIDTH];                                           │
│        int x,y;                                                              │
│                                                                              │
│        clrscr();                                                             │
│                                                                              │
│        for(y=0; y<HEIGHT; y++)                                               |
|               for(x=0; x<WIDTH; x++)                                         |
|                      friend[y][x]='.';                                       |
|                                                                              |
|        while(x >= 0)                                                         |
|        {                                                                     |
|                for(y=0; y<HEIGHT; y++)                                       |
|                {                                                             |
|                        for(x=0; x<WIDTH; x++)                                |
|                                printf("%c", friend[y][x]);                   |
|                        printf("\n");                                         |
|                }                                                             |
|                                                                              |
|                printf("Coordinates: ");                                      |
|                scanf("%d,%d", &x, &y);                       /*This line*/   |
|                                                                              |
|                if(enemy[y][x] == 1)                                          |
|                        friend[y][x]="\xDB";                                  |
|               else                                                           |
|                        friend[y][x]="\xB0";                                  | 
|        }                                                                     |
|}                                                                             │
├─────────────────────────────────── Watch ────────────────────────────────────┤
│                                                                              │
└──────────────────────────────────────────────────────────────────────────────┘
 F1-Help  F5-Zoom  F6-Switch  F7-Trace  F8-Step  F9-Make  F10-Menu   NUM

1
你在测试时使用了哪些值? - Baltasarq
3
5是超出了范围。C数组索引从0开始。 - Fred Foo
2个回答

6
问题在于输入数据。5,2指的是第5行,第2列,问题在于第5行不存在(高度为5,因此行数从0到4)。一旦您更改了这些值,它们变成了2,5,这 正确地 指向第2行(第三行)和第5列(第六列)。

另一个问题:由于我将数组敌人设置为enemy [5] [10],而C数组是从零开始的,因此如果我使用10列和5行进行初始化,这样做是否有错? - Aaron
@aerohn,只要在0..4、0..9的段中访问它,就不会有问题。我的意思是,在初始化时设置了10行x5列,你需要记住正确访问它们:唯一需要注意的是,有10行从0到9编号,但不要被最大行号索引所迷惑,实际上仍然有10行! - Baltasarq
C语言中的数组是以零为索引的。抱歉,我没看到这个答案的年份有多旧。 - A Person

3
如果您将y[HEIGHT]和x[WIDTH]设置为5和2,那么它会如何工作呢?因为您的enemy[HEIGHT][WIDTH]数组是5x10的数组。
当您使用y的值为5时,超出了其限制,即0到4。
难道不是这样吗.....?

1
敌人数组的HEIGHT设置为5(即0-4),WIDTH设置为10(即0-9),对吗? 当你尝试使用scanf(“%d%d”,&y,&x)输入5和2作为HEIGHT和WIDTH时。但是y的值应该在0(最小值)到4(最大值)之间。但你却输入了5,超出了其范围…? - Pushpendra
@Pushpendra... 是的,C语言中的数组是从0开始的,我明白了。我尝试将HEIGHT设置为6,WIDTH设置为11...然后将那行修改为 scanf("%d,%d", &y, &x);。但还是不能正常工作。 - Aaron
关于我的数组,这个初始化是正确的吗?char enemy[5][10] = { {0,0,0,0,0,0,0,0,0,0}, {0,1,1,0,0,1,0,0,0,0}, {0,0,0,1,0,1,0,1,1,0}, {0,0,0,0,0,0,0,0,1,1}, {0,0,1,1,0,1,0,0,0,1} }; - Aaron

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接