【发布时间】:2020-11-16 06:51:22
【问题描述】:
#include <stdio.h>
int main(void){
int row, col, mat[row][col], i, j, high = 0, sec_high = 0;
scanf("%d %d", &row, &col);
for(i = 0; i < row; i++)
for(j = 0; j < col; j++){
printf("\nEnter %d row %d col.\n", i, j);
scanf("%d", &mat[row][col]);
printf("%d \n", mat[row][col]);
}
for(i = 0; i < row; i++){
for(j = 0; j < col; j++){
if (high < mat[i][j]){
sec_high = high;
high = mat[i][j];
}
else if(sec_high < mat[i][j]){
sec_high = mat[i][j];
}
printf("i%d j%d h%d s%d mat%d\n", i, j, high, sec_high, mat[i][j]);
}
}
printf("The second highest number is: %d.", sec_high);
}
我在这里要做的只是从矩阵中取出第二高的数字。一切都很好,直到第三个printf 来我得到随机数巨大的数字。这是完全出乎意料的,因为我在输入时已经打印了一次这些数字并且一切都很好。那么这里的逻辑错误是什么?
【问题讨论】:
-
您在初始化或读取任何内容之前使用
row和col。int row, col, mat[row][col] -
阅读编译器(例如GCC...)和调试器(例如GDB...)的文档。另请阅读Modern C。阅读您正在使用的每个函数的documentation(例如
scanf、printf等...)。编译所有警告和调试信息:gcc -Wall -Wextra -g。使用gdb了解程序的行为 -
This answer 与您的问题相关
-
C 程序从上到下执行。不是一次所有的行。
-
赋值给一个变量和读入一个变量有什么区别?