【问题标题】:Codeblocks assigned a value to a variable on its own [duplicate]代码块自己为变量赋值[重复]
【发布时间】:2020-12-02 12:33:48
【问题描述】:

所以我在 c 中声明了一个名为 toplam 的整数,但根本没有给它一个值。然而,当我打开手表窗口时,它显示它的值为 16。我使用了一个在线 c 编译器并将代码复制并粘贴到其中,它运行顺利,除非被询问,否则没有为 toplam 分配任何值。我认为这是 Codeblocks 本身的错误,但我不确定。如何解决这个问题,而不必从 toplam 中减去 16 以使其为 0?

int fak(int j){
    int sonuc=1;
    while(j!=0){
        sonuc = sonuc * j;
        j--;
    }

    return sonuc;
}


int main()
{
    int sayi,i,j,sonuc,toplam;
    printf("sayi giriniz: \n");
    scanf("%d",&sayi);

    for(i=1;;i*=10){
        if(sayi/i==0){
            break;
        }
        j=(sayi/i)%10;
        printf("%d\n",j);
        toplam=toplam+fak(j);
    }

    printf("%d",toplam);


    return 0;
}

这是我的代码。它获取输入的数字并打印出其中的各个数字,然后将它们的 faktorials 相加。

【问题讨论】:

  • 正如该问题的第一个答案中所解释的:stackoverflow.com/questions/21152138/… 未明确初始化的局部变量具有不确定的值,包括可能导致未定义行为的“陷阱表示”。如果您希望toplam0,请将其初始化为0
  • 如果不初始化,你期望看到什么值?在其生命周期中,变量始终具有值。它不能没有价值。
  • @Virgile 是的,非常感谢,我是编码新手,我不知道这是一回事 :)

标签: c variables codeblocks


【解决方案1】:

你只需将 toplam 初始化为 0

#include <stdio.h>

int fak(int j)
{
    int sonuc=1;
    while(j!=0)
    {
         sonuc = sonuc * j;
         j--;
    }
     return sonuc;
 }

int main()
{
    int sayi,i,j,sonuc,toplam=0;
    printf("sayi giriniz: ");
    scanf("%d",&sayi);
   for(i=1;i<=(i*10);i++)
   {
       if(sayi/i==0)
       {
           break;
       }
       j=(sayi/i)%10;
       printf("%d \n",j,fak(j));
       toplam=toplam+fak(j);
    }
    printf("%d",toplam);
    return 0;
}

【讨论】:

    猜你喜欢
    • 2017-07-01
    • 2013-09-13
    • 1970-01-01
    • 2017-06-20
    • 1970-01-01
    • 2017-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多