You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言稀疏矩阵三元组代码矩阵尺寸校验if语句问题求助

稀疏矩阵输入合法性校验修复方案

原逻辑问题

你当前写的if (i*j != i*i && j*j)完全不匹配需求:
这个表达式的实际判断逻辑是「i乘j的结果既不等于i的平方、也不等于j的平方」,只有当行数和列数不相等时才会触发,和你实际输入的矩阵元素总数没有任何关联,自然无法在6*6矩阵输入元素数不符时报错。

正确实现步骤

  1. 新增计数器变量统计实际读取的元素总数:在读取矩阵元素的代码前定义int actual_cnt = 0;
  2. 每成功读取1个矩阵元素就将actual_cnt加1
  3. 替换原有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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 13:06:02