【发布时间】:2018-01-30 11:33:38
【问题描述】:
我用 C 语言编写了一个程序,它允许我在一个二维数组的“房间”中四处走动。它工作正常,但现在我在尝试将其拆分为函数时遇到了问题。我可能会完全错误地处理它,因为我只在 Visual Basic 中工作过,像这样的东西要容易得多。
printf 的 void 函数也可以正常工作。
这是我的代码:
#include <stdio.h>
void instruction(void) {
printf("Move: W=up, D=right, S=down, A=left an apply with RETURN.\n");
}
void wall(void) {
printf("##### You are in front of a wall. Please move somewhere else! #####\n");
}
int runter(roomxy, y, x, index) {
roomxy[y][x] = 0;
y = y + 1;
if (y>3 || y<0) {
y = y - 1;
wall();
index--;
return (index);
}
return (roomxy[y][x]);
}
void main() {
char c[2];
int steps;
int i;
int j;
int k;
int room[4][4] = { 0 };
int ypos = 0;
int xpos = 0;
room[ypos][xpos] = 1;
for(j=0; j<4; j++) {
for(k=0; k<4; k++) {
printf("%d ", room[j][k]);
}
printf("\n");
}
printf("How many steps do you want to make? (Number from 1 to 50.)\n");
scanf("%d", &steps);
if (steps>0 && steps<51) {
for (i=1; i<=steps; i++) {
instruction();
scanf("%s", c);
if (c[0] == 'S' || c[0] == 's') {
room = runter(room, ypos, xpos, i);
/*room[ypos][xpos] = 0;
ypos = ypos + 1;
if (ypos>3 || ypos<0) {
ypos = ypos - 1;
wall();
i--;
}*/
}
else if (c[0] == 'W' || c[0] == 'w') {
room[ypos][xpos] = 0;
ypos = ypos - 1;
if (ypos>3 || ypos<0) {
ypos = ypos + 1;
wall();
ypos = ypos + 1;
wall();
i--;
}
}
else if (c[0] == 'D' || c[0] == 'd') {
room[ypos][xpos] = 0;
xpos = xpos + 1;
if (xpos>3 || xpos<0) {
xpos = xpos - 1;
wall();
i--;
}
}
else if (c[0] == 'A' || c[0] == 'a') {
room[ypos][xpos] = 0;
xpos = xpos - 1;
if (xpos>3 || xpos<0) {
xpos = xpos + 1;
wall();
i--;
}
}
else {printf("##### ERROR: Only type in W, D, S or A! #####\n"); i--;}
room[ypos][xpos] = 1;
printf("Ihre Position:\n");
for(j=0; j<4; j++) {
for(k=0; k<4; k++) {
printf("%d ", room[j][k]);
}
printf("\n");
}
}
}
else {printf("##### Please enter number from 1 to 50! #####\n");}
}
我得到的错误是“下标值既不是数组也不是指针也不是向量”。
我不知道如何继续前进,因为我完全被困在试图弄清楚带有数组的函数在 C 中是如何工作的。
我也读过 typedef 参数,但我也不知道如何使用它。
显然我在编程方面是一个该死的菜鸟。
提前谢谢你们!
【问题讨论】:
-
那段代码能编译吗?
runter的定义缺少其参数的数据类型 -
你的函数原型应该是这样的
int runter(int roomxy[], int y, int x, int index)。 -
这些不是都声明为整数吗?好的,我不知道该怎么做,我试试,谢谢!
-
你应该努力格式化你的代码。这是为了你好。
-
格式化可能有点主观,但有一些常用的模式。您的格式问题首先是缩进。有时你根本不缩进(比如在
main() {之后)并且你在结尾处有一个狂野的}(这可能只是一个错字)。在 C 中缩进 8 个字符(一个完整的制表位)被认为是多余的。您还可以充分利用某些代码行之间的空格(例如块之间)。搜索“C 格式标准”,您会发现一些可以提高 C 代码可读性的好建议。
标签: c arrays function multidimensional-array