函数中的第二个参数始终为 0

The second parameter in a function is always 0

基本上,我需要得到一个二维数组整行的总和或平均值。

首先我需要获取我需要使用的行,然后 'S' 求总和或 'M' 求平均值(葡萄牙语为 Média)。之后我需要读取整个数组,最后我只需要执行请求的操作。

double soma_linha_matriz(double matriz[LINHA][COLUNA], int l)
{
    int i;
    double soma;
    
    soma = 0;
    
    for(i = 0; i < COLUNA; i++)
    {
        soma = soma + matriz[l][i];
    }
    
    return soma;
}

出于某种原因,即使我在主函数中进行了 scanf,'l' 在这里始终为零:


int main()
{
    double matriz[LINHA][COLUNA], resultado;
    
    int i, j, l;
    
    char sm;
    
    scanf("%d", &l);
    
    scanf("%s", &sm);
    
    for(i = 0; i < LINHA; i++)
    {
        for(j = 0; j < COLUNA; j++)
        {
            scanf("%lf", &matriz[i][j]);
        }
    }
    
    if(sm == 'S')
    {
        resultado = soma_linha_matriz(matriz, l);
        
        printf("%.1lf", resultado);
    }
    else if(sm == 'M')
    {
        resultado = media_linha_matriz(matriz, l);
        
        printf("%.1lf", resultado);
    }
    
    return 0;
}

我尝试了很长时间来纠正它,但我不完全知道为什么会这样...

有人能帮忙吗?

scanf("%s", &sm) 读取一个字符串,而不是一个字符。根据文档,它总是存储一个空终止符(除了匹配的字符之外,总是存储一个空字符(因此参数数组必须至少有 width+1 个字符的空间) - https://en.cppreference.com/w/c/io/fscanf) 并将其存储到您的 'l' 变量中。

这种情况也是典型的堆栈溢出错误。