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