我想输出数组中的最大元素和最小元素但是我程序执行之后不知道为什么最小元素没有输出,感觉思路应该没有问题但是不知道为什么

问题遇到的现象和发生背景

程序的目的是查找出数组中的最大元素和最小元素(用二维数组)
我想输出数组中的最大元素和最小元素但是我程序执行之后不知道为什么最小元素没有输出,感觉思路应该没有问题但是不知道为什么,希望有人能解答一下,谢谢

用代码块功能插入代码,请勿粘贴截图
#include
#include

int main()
{
    char str[3][3],max,min;
    int i,k,j=0;
    printf("Please enter 9 array elements\n");
    
    for(i=0;i<3;i++){
    gets(str[i]);
    }
    min=str[0][0];
    for(i=0;i<3;i++)
    {
        for(k=0; k<3; k++) {
            j=k+1;
            if(min>str[i][j]) { min = str[i][j]; }
        }
    }
    max=str[0][0];
    for(i=0;i<3;i++)
    {
        for(k=0; k<3; k++) {
            j=k+1;
            if(max<str[i][j]) { max = str[i][j]; }
        }
    }
    
    printf("max=%c\nmin=%c\n",max,min);
}

img


#include<stdio.h>
#include<string.h>
int main()
{
  char str[3][4], max, min;
  int i, j;
  printf("Please enter 9 array elements\n");

  for (i = 0; i < 3; i++) {
    gets(str[i]);
  }
  min = str[0][0];
  max = str[0][0];
  for (i = 0; i < 3; i++)
    for (j = 0; j < 3; j++) 
    {
      if (str[i][j] < min) min = str[i][j];
      if (str[i][j] > max) max = str[i][j];
    }
  printf("max=%c\nmin=%c\n", max, min);
  return 0;
}

gets(str[i]); 这是有问题的,gets获得的是字符串,每行输入3个字符,实际字符串要占四个字节的,最后有个换行符。
将数组改为char str[3][4]
另外错误的根本原因是你这个j=k+1是莫名其妙的。这放弃了第一个元素,然后越界读取了一个元素啊。当j=2时,k就等于3啦,越界啦
修改如下:

#include<stdio.h>
#include<string.h>
 
int main()
{
    char str[3][3],max,min;
    int i,k,j=0;
    printf("Please enter 9 array elements\n");
    
    for(i=0;i<3;i++){
    gets(str[i]);
    }
    min=str[0][0];
    for(i=0;i<3;i++)
    {
        for(k=0; k<3; k++) {
            j=k;
            if(min>str[i][j]) { min = str[i][j]; }
        }
    }
    max=str[0][0];
    for(i=0;i<3;i++)
    {
        for(k=0; k<3; k++) {
            j=k;
            if(max<str[i][j]) { max = str[i][j]; }
        }
    }
    
    printf("max=%c\nmin=%c\n",max,min);
    
}

img


你这里当k=2的时候,j=3,str[i][j]就数组越界了,max这里也一样越界了。
可以写成这样,可自己比一下也无妨。

img

img


#include<stdio.h>
#include<string.h>

int main()
{
    char str[3][4], max, min;//这里修改了
    int i, k, j = 0;
    printf("Please enter 9 array elements\n");

    for (i = 0; i<3; i++){
        gets(str[i]);
    }
    min = str[0][0];
    for (i = 0; i<3; i++)
    {
        for (k = 0; k<3; k++) {
            j = k ;//这里修改了
            if (min>str[i][j]) { min = str[i][j]; }
        }
    }
    max = str[0][0];
    for (i = 0; i<3; i++)
    {
        for (k = 0; k<3; k++) {
            j = k;//这里修改了
            if (max<str[i][j]) { max = str[i][j]; }
        }
    }

    printf("max=%c\nmin=%c\n", max, min);
}