#include
int m, n;
int main()
{
int h_l[10];
int i, j, pos_i = 0, pos_j = 0;
int h_i = 0, len = 0;
while (1)
{
int L[10][10];
int min = 65535;
if ((scanf("%d %d", &m, &n)) == 2) //输入数据
{
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
if ((scanf("%d", &L[i][j])) == 1)
;
else
break;
}
}
}
else
break;
if (m == 0 && n == 0)
break;
for (i = 0; i < m; i++)
{
for ( j = 0; j < n; j++)
{
if (L[i][j]<min)
{
min = L[i][j];
pos_i = i;
pos_j = j;
}
}
if (min == 0)
break;
}
len++;
h_l[h_i] = pos_i;
h_l[h_i + 1] = pos_j;
}
for (int k = 0; k < len; k = k + 2)
printf("%d %d\n", h_l[k] + 1, h_l[k + 1] + 1);
return 0;
}
m和n会不会大于10了,那样超过你数组的容量,越界就会出现段错误。
h_l[h_i] = pos_i;
h_l[h_i + 1] = pos_j;
这里下标会不会越界呢。
谢谢帮忙,问题我通过把数组大小改大解决了。虽然之前都没有越界。
在while循环中,你的h_i值一直是0 ,
当你while循环差过10次之后, len > 10 下面的for循环中h_l[k + 1]会超过10
for (int k = 0; k < len; k = k + 2)
printf("%d %d\n", h_l[k] + 1, h_l[k + 1] + 1);
if (m == 0 && n == 0)
break;
for (i = 0; i < m; i++)
{
for ( j = 0; j < n; j++)
{
if (L[i][j]<min)
{
min = L[i][j];
pos_i = i;
pos_j = j;
}
}
if (min == 0)
break;
}
len++;
h_l[h_i] = pos_i;
h_l[h_i + 1] = pos_j;
}
for (int k = 0; k < len; k = k + 2)
printf("%d %d\n", h_l[k] + 1, h_l[k + 1] + 1);
return 0;