【发布时间】:2021-06-11 12:26:21
【问题描述】:
#include<stdio.h>
int main(){
int sum[10]; char sex[10];
int i,j,ans;
for(int i=0;i<10;i++)
{
ans=0;
printf("Enter your gender (m/f) : ");
scanf("%c",&sex[i]);
printf("\nEnter your total score for 8-Question by giving score (1-5) : \n");
for(int j=0;j<8;j++)
{
printf("Score : ");
scanf("%d", &ans );
sum[i]+=ans;
}
//let say if input is 1 for 8 times sum should be 8 !
printf("\n sum of score is %d.\n ",sum[i]);
}
return 0;
}
我给出输入后的输出不是作为 8 个输入的添加。我想提供 8 个输入并将其存储在总和数组中。我想添加用户 8 个输入并存储在 sum 数组中。
【问题讨论】:
-
您有一个
sum数组,其中循环的每次迭代都会增加下一个元素,您确定不想要一个值吗?int sum=0而不是int sum[10] -
请edit您的问题并添加输入和相应的输出。也许第一个输入的换行符没有被消耗。试试
scanf(" %d", &ans );(注意%d前面的空格)。您还应该检查scanf的返回码。它会告诉您成功转换的项目数,在您的情况下应该是 1。 -
你还没有初始化/归零
sum[10],因此你有一个关于结果的'未定义行为'。sum[i]+=ans;=>sum[i]=sum[i]+ans;,如果sum[i]在开始时不为0,那么... -
附带说明:在不检查返回值的情况下使用
scanf是不安全的。有关详细信息,请参阅此页面:A beginners' guide away from scanf() -
@Lundin 另一个非常尖锐的意见!作为系统级语言,C 本质上是“不安全的”,因为它不能保护您免受编写错误代码的后果。当然
scanf()应该非常谨慎地对待。不过,我不会像您那样强调地表达它。