Arrays C语言中具有随机矩阵邻居的多维数组

Arrays C语言中具有随机矩阵邻居的多维数组,arrays,c,matrix,multidimensional-array,Arrays,C,Matrix,Multidimensional Array,我想检查随机矩阵中用户选择的单元格的值。右,左,上,我想看看你楼下的邻居。如果所选单元格中的值大于相邻单元格中的值,我想用红色打印字母R。如果所选单元格中的值小于和/或等于其相邻单元格中的值,我希望打印绿色,即字母G。我无法将R和G打印到矩阵中 #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <time.h> int main(){ int a, b

我想检查随机矩阵中用户选择的单元格的值。右,左,上,我想看看你楼下的邻居。如果所选单元格中的值大于相邻单元格中的值,我想用红色打印字母R。如果所选单元格中的值小于和/或等于其相邻单元格中的值,我希望打印绿色,即字母G。我无法将R和G打印到矩阵中


#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
 
int main(){
    int a, b, i, j,k,l;
    int array1[i][j], array2[i][j];
    
    
    printf("enter Matrix line number: ");
    scanf("%d", &a);
    printf("enter the number of Matrix columns:");
    scanf("%d", &b);
    
    int matrix[a][b], matrix2[b][a];
    
    for(i=0; i<a; i++) 
    {
        
    }
      for(int i=0; i<a; i++)
        for(int j=0; j<b; j++){
            array1[i][j] = rand() % 10+1; 
            array2[i][j] = rand() % 10+1; 
            
        }
    printf("\nOur matrix:\n");
    for(int i=0; i<a; i++){
        for(int j=0; j<b; j++){
            printf("%3d ", array2[i][j]);
        }
        printf("\n");
    }
    
    printf("select a cell from The Matrix:\n");
    printf("Senter the line of The Matrix you are selecting:\n");
    scanf ("%d",&k);
    printf ("enter the column of The Matrix you are selecting:\n");
    scanf("%d",&l);
    int p=array2[k][l];
    int r=array2[k-1][l];
    int m=array2[k][l-1];
    int n=array2[k+1][l];
    int s=array2[k][l+1];
    if(p>r && p>n && p>s && p>m)
    {
        
        printf("The cell you enter is larger than all its neighbors.\n");
        char S=array2[k][l];
        S='R';
        printf("%3d", array2[k][l]);
    }
    else
    {
        printf("The cell you enter is smaller than its neighbors and / or has a value equal to its neighbors.\n");
        char S=array2[k][l];
        S='G';
        printf("%3d", array2[k][l]);
    }
    getch();
    return 0;
}

#包括
#包括
#包括
#包括
int main(){
int a,b,i,j,k,l;
国际阵列1[i][j],阵列2[i][j];
printf(“输入矩阵行号:”);
scanf(“%d”和“&a”);
printf(“输入矩阵列数:”);
scanf(“%d”和“b”);
整数矩阵[a][b],矩阵2[b][a];

对于(i=0;i而言,您的代码存在一些问题,即:使用未初始化的值、无法执行边界检查以及对按值复制的误解

当你有一个函数,比如

void foo(void) {
    int a;
    printf("%d\n", a);
}
变量
a
从未初始化。它包含堆栈上预先存在的任何数据,即垃圾。在使用变量之前,应始终为变量赋值

这段代码

int p=array2[k][l];
int r=array2[k-1][l];
int m=array2[k][l-1];
int n=array2[k+1][l];
int s=array2[k][l+1];
包含几个实例,其中您可能会在一个方向上走得太远,访问不应该访问的内存(例如,当
k==0,j==0
array[k-1][l]
尝试访问
array[-1][0]
,这是不允许的)。您需要注意确保只查看允许访问的位置(这与验证用户输入密切相关)

当你这样做的时候

char S=array2[k][l];
S='R';
您正在将在
array2[k][l]
中找到的值复制到局部变量
char S
。然后更改局部值-这不会更新在
array2[k][l]
中找到的值

除此之外,您还有很多“额外”代码实际上什么都做不了。您应该尽量不要留下错误的或未使用的代码。干净的格式也是能够轻松读取程序流的关键


这个程序的核心可以分为几个步骤

  • 给我们的随机数发生器设定种子
  • 接受并验证用户输入:X&Y
  • 使用:X&Y创建整数矩阵。
    • 用随机值填充整数矩阵
  • 使用:X&Y创建红色/绿色矩阵。
    • 根据整数矩阵中的值填充红色/绿色矩阵
  • 显示我们的数据
这是一个简单的工作程序。请注意我们要确保数组访问在一定范围内的长度。我将让您自行决定如何使用用户输入来查看单个单元格(这里应该有足够的提示)

#包括
#包括
#包括
int in_范围(int值、int下限、int上限){
返回值>=下限值n&&v>s&&v>e&&v>w)?“R”:“G”;
}
内部主(空){
int x=0,y=0;
srand(时间(空));
而(!在_范围内(x,1,10)| |!在_范围内(y,1,10)){
printf(“输入X:”);
scanf(“%d”和&x);
printf(“输入Y:”);
scanf(“%d”和“&y”);
}
整数矩阵[x][y];
对于(int i=0;i
i和j在“int array1[i][j]”中未初始化。修复此问题我认为这不是唯一的问题。而且我在以红色(R)和绿色(G)打印矩阵时遇到问题,不创建矩阵。请启用编译器警告您将字符“R”或“G”指定给局部变量
S
,而不是数组。我没有收到错误或警告非常感谢您,但我希望用户选择矩阵中的元素。并且不要使用颜色。输入值,我将与它的相邻行和co进行比较从键盘输入的列。例如,用户输入3,2。值3。行2。列。值是否比邻居大?是的。然后在矩阵中删除该值。改为写R。不是吗?写G.@BS这一切都很好,但这取决于您在自己的程序中实现。我展示的程序应该提供足够的关于如何实现的提示源为了解决这个问题,堆栈溢出不是一个编码服务。另外,我将仔细考虑哪些问题可能是由“删除”您未来的计算可能依赖的数据引起的。记住,您显示数据的方式不一定与您如何存储数据完全一样。我很感激您的好想法、想法和建议。
#include <stdlib.h>
#include <stdio.h>
#include <time.h>

int in_range(int value, int lower, int upper) {
    return value >= lower && value <= upper;
}

char get_cell_color(int x, int y, int max_x, int max_y, int m[max_x][max_y]) {
    int v = m[x][y];
    int n = -1, s = -1, e = -1, w = -1;

    /* change from logical "size", to maximum "index" */
    max_x -= 1;
    max_y -= 1;

    if (in_range(x, 1, max_x))
        n = m[x - 1][y];
    if (in_range(x, 0, max_x - 1))
        s = m[x + 1][y];

    if (in_range(y, 0, max_y - 1))
        e = m[x][y + 1];
    if (in_range(y, 1, max_y))
        w = m[x][y - 1];

    return (v > n && v > s && v > e && v > w) ? 'R' : 'G';
}

int main(void) {
    int x = 0, y = 0;

    srand(time(NULL));

    while (!in_range(x, 1, 10) || !in_range(y, 1, 10)) {
        printf("Enter X: ");
        scanf("%d", &x);
        printf("Enter Y: ");
        scanf("%d", &y);
    }

    int matrix[x][y];

    for (int i = 0; i < x; i++)
        for (int j = 0; j < y; j++)
            matrix[i][j] = rand() % 10 + 1;

    char rg_matrix[x][y];

    for (int i = 0; i < x; i++)
        for (int j = 0; j < y; j++)
            rg_matrix[i][j] = get_cell_color(i, j, x, y, matrix);

    for (int i = 0; i < x; i++) {
        printf("[ ");
        for (int j = 0; j < y; j++)
            printf("\033[%dm%02d ",
                    (rg_matrix[i][j] == 'R' ? 31 : 32),
                    matrix[i][j]);
        printf("\033[0m]\n");
    }
}