C 在分配nodeid+时覆盖nodeid+;移动时在二维阵列中
我试图将更新后的nodeid值分配给新的数组元素,但每次这样做时,我都会用分配nodeid的数组元素的初始值覆盖nodeid值。下面是我要说的:C 在分配nodeid+时覆盖nodeid+;移动时在二维阵列中,c,arrays,overwrite,C,Arrays,Overwrite,我试图将更新后的nodeid值分配给新的数组元素,但每次这样做时,我都会用分配nodeid的数组元素的初始值覆盖nodeid值。下面是我要说的: #include <stdio.h> #include "motion.h" int motion (int nodeid, int row, int column, int direction) { nodeid = field [row][column]; while (((row < (LENGTH - 1
#include <stdio.h>
#include "motion.h"
int motion (int nodeid, int row, int column, int direction) {
nodeid = field [row][column];
while (((row < (LENGTH - 1))&&(row > 0))||((column < (WIDTH - 1))&&(column > 0))){
if (direction == 0){
nodeid++;
nodeid = field [row][column + 1];
column++;
}
else if (direction == 1){
nodeid++;
nodeid = field [row][column - 1];
column--;
}
else if (direction == 2) {
nodeid++;
nodeid = field [row - 1][column];
row--;
}
else if (direction == 3) {
nodeid++;
nodeid = field [row + 1][column];
row++;
}
}
return 0;
}
还有我的源代码main.c:
#include <stdio.h>
#include "motion.h"
int main() {
int samples;
int i;
int j;
int k;
printf ("How many samples do you want?\n");
scanf ("%d", &samples);
for (i = 0; i < samples; i++){
printf ("Indicate nodeid, row, column and direction\n");
scanf ("%d %d %d %d", &nodeid, &row, &column, &direction);
for(j = 0; j < LENGTH; j++)
{
for(k = 0; k < WIDTH; k++){
field[j][k] = 0;
}
}
motion (nodeid, row, column, direction);
printf ("\n%d", print_field(field, row, column));
}
return 0;
}
~
正如你所看到的,我所有的结果在条内都是0,还有这里和那里的点
这是“我的打印”字段功能的代码:
#include <stdio.h>
#include "motion.h"
int print_field(int field[][ WIDTH ], int row, int column){
int i;
int j;
int k;
int t;
for ( k = 0; k < WIDTH * 6; k++){
printf("_");
}
printf ("\n");
for ( i = 0; i < LENGTH; i++){
printf ("|");
for (j = 0; j < WIDTH; j++){
printf( "%.3f", field [i][j]) ;
printf (" ");
}
printf ("\n");
for ( i = 0; i < LENGTH; i++){
printf ("|");
for (j = 0; j < WIDTH; j++){
printf( "%.3f", field [i][j]) ;
printf (" ");
}
printf ("\b|");
printf ("\n");
}
for (t = 0; t < WIDTH * 6; t++){
printf("_");
}
printf ("\n");
return 0;
}
显然,在我的motion.c代码中仍然有一些东西阻止了非零数字的显示。你的作业是向后的。而不是
nodeid = field [row][column + 1];
试一试
此外,您应该在运动函数中使用枚举常量(右、左等)。
您应该在main中定义列、行、节点ID和方向,而不是全局定义
因此,我将其改写如下:
int motion (int nodeid, int row, int column, int direction) {
field [row][column] = nodeid;
while (row < LENGTH - 1 && row > 0 && column < WIDTH - 1 && column > 0){
if (direction == Right)
field[row][++column] = ++nodeid;
else if (direction == Left)
field[row][--column] = ++nodeid;
else if (direction == Up)
field[--row][column] = ++nodeid;
else if (direction == Down)
field[++row][column] = ++nodeid;
}
return 0;
}
int运动(int节点ID、int行、int列、int方向){
字段[行][列]=nodeid;
while(行0&&column0){
如果(方向==右)
字段[行][++列]=++节点ID;
else if(方向==左)
字段[行][--列]=++nodeid;
否则如果(方向==向上)
字段[--行][列]=++nodeid;
否则如果(方向==向下)
字段[++行][列]=++节点ID;
}
返回0;
}
我已经厌倦了键入“缩进以使其可读”@EdHeal:Indented it,应该很快被接受:Pi没有看到字段变量分配的代码。constructed while条件中不需要任何这些参数。抱歉,我刚刚开始使用C,正确缩进它是一件痛苦的事情。但是现在让我们把重点放在这个问题上。你能帮我吗?我仍然遇到分段错误(内核转储),当我尝试访问gdb时,我得到了以下结果:gdb:符号查找错误:gdb:未定义的符号:PyUnicodeUCS4_FromEncodedObjectThe | | in the while condition应该是&&。我改了。
________________________________________________________________________
|0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000|
|0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000|
|0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000|
|0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000|
|0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000|
|0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000|
|0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000|
|0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000|
|0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000|
|0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000|
|0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000|
|0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000|
|0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000|
|0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000|
|0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000|
|0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000|
|0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000|
|0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000|
________________________________________________________________________
nodeid = field [row][column + 1];
field [row][column + 1] = nodeid;
int motion (int nodeid, int row, int column, int direction) {
field [row][column] = nodeid;
while (row < LENGTH - 1 && row > 0 && column < WIDTH - 1 && column > 0){
if (direction == Right)
field[row][++column] = ++nodeid;
else if (direction == Left)
field[row][--column] = ++nodeid;
else if (direction == Up)
field[--row][column] = ++nodeid;
else if (direction == Down)
field[++row][column] = ++nodeid;
}
return 0;
}