【问题标题】:Output of sum coming incorrect in for loopfor循环中总和的输出不正确
【发布时间】: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", &amp;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() 应该非常谨慎地对待。不过,我不会像您那样强调地表达它。

标签: c for-loop sum


【解决方案1】:

sum[i]的初始值不初始化是未知的。

int sum[10] = {0} ;

【讨论】:

    【解决方案2】:

    在您的代码中,默认情况下 int sum[10] 垃圾值并且您仅在数组中存储 8 个元素。所以剩下的就是垃圾值了。

    在存储数组之前使用memset

    memset(sum, '\0', 10);
    memset(sex, '\0', 10);
    

    【讨论】:

    • 您只初始化了 10 个字节的 sum - 32 位系统上的 2.5 个元素。你需要memset( sum, 0, sizeof(sum) )。如果设置为零,则在初始化时更安全。对于sex,您可以避免使用它,因为它恰好是char 数组,但无论如何您都应该使用相同的模式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-21
    • 1970-01-01
    • 2021-10-29
    • 2021-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多