关于#矩阵#的问题,如何解决?

题干
已知两个稀疏矩阵A和B,其行数和列数均对应相等,编写一个程序,计算A和B之和,假设稀疏矩阵采用三元组表示。

 测试输入    期待的输出    时间限制    内存限制    额外进程

测试用例 1 以文本方式显示
1,1,2;2,1,3↵
1,2,5;2,1,-3↵
以文本方式显示
1,1,2;1,2,5↵
1秒 64M 0
我的代码

 
#include 
#include 
 
typedef struct
{
    int row; // 行号
    int col; // 列号
    int value; // 元素值
} Triple;
 
typedef struct
{
    Triple *data; // 三元组表
    int rows; // 行数
    int cols; // 列数
    int nums; // 非零元素个数
} SparseMatrix;
 
// 创建稀疏矩阵
SparseMatrix* createSparseMatrix(int rows, int cols, int nums)
{
    SparseMatrix *matrix = (SparseMatrix*)malloc(sizeof(SparseMatrix));
    matrix->rows = rows;
    matrix->cols = cols;
    matrix->nums = nums;
    matrix->data = (Triple*)malloc(sizeof(Triple) * nums);
    return matrix;
}
 
// 释放稀疏矩阵
void freeSparseMatrix(SparseMatrix *matrix)
{
    free(matrix->data);
    free(matrix);
}
 
// 读取稀疏矩阵
SparseMatrix* readSparseMatrix()
{
    int rows=2, cols=2, nums=2;
    SparseMatrix *matrix = createSparseMatrix(rows, cols, nums);
    for (int i = 0; i < nums; i++)
    {
        scanf("%d,%d,%d", &matrix->data[i].row, &matrix->data[i].col, &matrix->data[i].value);
    }
    return matrix;
}
 
// 打印稀疏矩阵
void printSparseMatrix(SparseMatrix *matrix)
{
    for (int i = 0; i < matrix->nums; i++)
    {
        printf("%d,%d,%d;", matrix->data[i].row, matrix->data[i].col, matrix->data[i].value);
    }
    printf("\n");
}
 
// 计算两个稀疏矩阵的和
SparseMatrix* addSparseMatrix(SparseMatrix *matrixA, SparseMatrix *matrixB)
{
    if (matrixA->rows != matrixB->rows || matrixA->cols != matrixB->cols)
    {
        printf("Error: the size of matrixA and matrixB must be equal!\n") ;
}
SparseMatrix *matrixC = createSparseMatrix(matrixA->rows, matrixA->cols, 0);
int i = 0, j = 0, k = 0;
while (i < matrixA->nums && j < matrixB->nums)
{
    if (matrixA->data[i].row < matrixB->data[j].row ||
        (matrixA->data[i].row == matrixB->data[j].row && matrixA->data[i].col < matrixB->data[j].col))
    {
        matrixC->data[k].row = matrixA->data[i].row;
        matrixC->data[k].col = matrixA->data[i].col;
        matrixC->data[k].value = matrixA->data[i].value;
        i++;
    }
    else if (matrixA->data[i].row > matrixB->data[j].row ||
             (matrixA->data[i].row == matrixB->data[j].row && matrixA->data[i].col > matrixB->data[j].col))
    {
        matrixC->data[k].row = matrixB->data[j].row;
        matrixC->data[k].col = matrixB->data[j].col;
        matrixC->data[k].value = matrixB->data[j].value;
        j++;
    }
    else
    {
        matrixC->data[k].row = matrixA->data[i].row;
        matrixC->data[k].col = matrixA->data[i].col;
        matrixC->data[k].value = matrixA->data[i].value + matrixB->data[j].value;
        i++;
        j++;
    }
    k++;
}
while (i < matrixA->nums)
{
    matrixC->data[k].row = matrixA->data[i].row;
    matrixC->data[k].col = matrixA->data[i].col;
    matrixC->data[k].value = matrixA->data[i].value;
    i++;
    k++;
}
while (j < matrixB->nums)
{
    matrixC->data[k].row = matrixB->data[j].row;
    matrixC->data[k].col = matrixB->data[j].col;
    matrixC->data[k].value = matrixB->data[j].value;
    j++;
    k++;
}

matrixC->nums = k;
matrixC->nums = nums;
return matrixC;
}
int main() 
{ 
// 读取稀疏矩阵A和B 
SparseMatrix *matrixA = readSparseMatrix(); 
SparseMatrix *matrixB = readSparseMatrix(); 
// 计算稀疏矩阵A和B的和 
SparseMatrix *matrixC = addSparseMatrix(matrixA, matrixB); 
// 输出稀疏矩阵C 
printSparseMatrix(matrixC); 
return 0; 
}

出现的问题


main.cpp: In function 'SparseMatrix* addSparseMatrix(SparseMatrix*, SparseMatrix*)':
main.cpp:114:17: error: 'nums' was not declared in this scope
 matrixC->nums = nums;
                 ^
main.cpp: In function 'SparseMatrix* readSparseMatrix()':
main.cpp:44:94: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d,%d,%d", &matrix->data[i].row, &matrix->data[i].col, &matrix->data[i].value);

matrixC->nums = nums;
在SparseMatrix* readSparseMatrix()后面的几个函数里,并没有 nums 这个变量。

matrixC->nums = k;
matrixC->nums = nums;
连续2次赋值,那么这两句必然有一句是废话