C语言二维矩阵打印代码运行时终端无限重复输出首个输入值问题
C语言矩阵打印问题修复方案
问题根因
- 打印逻辑存在死循环:
while (i < a)循环内部没有对i执行自增操作,i始终为初始值0,永远满足i < a的判断条件,因此会无限打印第一个元素c[0][0],和你观察到的输出现象完全一致。 - 可变长度数组定义时机错误:C语言中可变长度数组的长度在定义时就会固定,你在用户输入行列数
a/b之前,就用初始值i=500、j=500定义了数组c[i][j],后续修改a/b不会改变数组实际大小,属于隐藏的越界风险。 - 打印逻辑冗余:不需要嵌套
for+while循环实现矩阵打印,两层常规的行列遍历循环即可实现需求,逻辑更清晰不易出错。
修正后代码
#include <stdio.h> #include <stdlib.h> #include <stdbool.h> int main() { int a, b; int i, j; printf("\n"); printf("Please enter the number of rows: \n"); scanf("%d", &a); printf("Please enter the number of columns: \n"); scanf("%d", &b); // 输入完成后再定义可变长度数组,避免长度错误 int c[a][b]; printf("Enter Matrix A \n"); for (i = 0; i < a; i++) { for (j = 0; j < b; j++) { scanf("%d", &c[i][j]); } } // 两层循环打印矩阵,每行结束自动换行 printf("\nMatrix A output:\n"); for (i = 0; i < a; i++) { for (j = 0; j < b; j++) { printf("%d ", c[i][j]); } printf("\n"); } return 0; }
内容的提问来源于stack exchange,提问作者Dhruv Bishnoi
相关产品推荐
相关产品推荐

