C语言稀疏矩阵三元组代码矩阵尺寸校验if语句问题求助
稀疏矩阵输入合法性校验修复方案
原逻辑问题
你当前写的if (i*j != i*i && j*j)完全不匹配需求:
这个表达式的实际判断逻辑是「i乘j的结果既不等于i的平方、也不等于j的平方」,只有当行数和列数不相等时才会触发,和你实际输入的矩阵元素总数没有任何关联,自然无法在6*6矩阵输入元素数不符时报错。
正确实现步骤
- 新增计数器变量统计实际读取的元素总数:在读取矩阵元素的代码前定义
int actual_cnt = 0; - 每成功读取1个矩阵元素就将
actual_cnt加1 - 替换原有if判断为以下逻辑:
// m是预设行数、n是预设列数 if (actual_cnt != m * n) { printf("尺寸错误:输入元素总数与预设%d行%d列要求的%d个元素不匹配\n", m, n, m*n); // 此处补充程序退出逻辑,比如return 1; 或跳转到资源释放分支 }
优化建议
- 读取元素时校验
scanf返回值,避免非数字输入导致计数偏差:int val; if (scanf("%d", &val) == 1) { actual_cnt++; // 存储val到对应矩阵位置的逻辑 } - 报错退出前注意释放已申请的堆内存,避免内存泄漏。
内容的提问来源于stack exchange,提问作者liu Cody
相关产品推荐
相关产品推荐

