【发布时间】:2022-01-06 21:01:13
【问题描述】:
基本上,我需要得到一个二维数组整行的总和或平均值。
首先我需要得到我需要使用的线,然后是“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;
}
由于某种原因,'l' 在这里总是为零,即使我在主函数中做了一个 scanf:
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;
}
我尝试了很长时间来纠正它,但我不知道为什么会发生这种情况......
有人可以帮忙吗?
【问题讨论】:
-
这是什么语言?你能添加适当的标签吗?
-
@Phil 是 C。对不起,我是新来的,我想我会选择其他地方的语言。
-
scanf("%s", &sm);这是未定义的行为,"%c"是char的格式说明符,"%s"用于字符串。 -
@yano 出于某种原因,这样做会导致程序立即关闭。这就是我使用“%s”的原因
-
当您
scanf("%d", &l);时,输入缓冲区中会留下一个换行符,随后会被scanf("%c", &sm);吞噬,并将换行符保存到sm。您可以在"%c"前面加上空格以跳过换行符:scanf(" %c", &sm);。请参阅here 了解更多信息。
标签: c parameter-passing