在C中计算运行总数时遇到问题

在C中计算运行总数时遇到问题,c,C,我是编程新手,也是这个网站的新手,所以大家好。。。 我试图得到一个从1到10的整数的运行总数,但我得到的是胡言乱语的答案,我就是不明白为什么。 为了找出哪里出了问题,我添加了 printf(" running total is %d\n", sum); 行到while循环,但得到了更多相同的废话。。。 请查看结果 我相信这有一个显而易见的解决方案…我只是太傻了,看不见它! 有人知道我做错了什么吗 #include <stdio.h> int main(void) {

我是编程新手,也是这个网站的新手,所以大家好。。。 我试图得到一个从1到10的整数的运行总数,但我得到的是胡言乱语的答案,我就是不明白为什么。 为了找出哪里出了问题,我添加了

printf(" running total is %d\n", sum);
行到while循环,但得到了更多相同的废话。。。 请查看结果

我相信这有一个显而易见的解决方案…我只是太傻了,看不见它! 有人知道我做错了什么吗

#include <stdio.h>


int main(void)      {

    int count,sum,square;           
    int upto=10;                 

    count = 0;                
    square = 0;                 

    while (++count < upto)   {   
        square = count * count;
        printf("square of %d is %d",count,square);     
        sum =square + sum;
        printf(" running total is %d\n", sum);
    }

    printf("overall total of squares of integers 1 thru 10 is %d\n", sum);           

    return 0;
}
#包括
内部主(空){
整数计数、和、平方;
int高达10;
计数=0;
平方=0;
而(++计数<最多){
平方=计数*计数;
printf(“%d的平方等于%d”,计数,平方);
总和=平方+总和;
printf(“运行总计为%d\n”,总和);
}
printf(“整数1到10的平方总和为%d\n”,总和);
返回0;
}

您需要将总和初始化为0


EDIT正如其他人在事后所述,您看到垃圾的原因是
sum
未初始化,并且包含内存中的任何内容。它可以是任何东西,如果将它与
sum=square+sum
一起使用,则会将未初始化的值加上square。

您需要将sum初始化为0


EDIT正如其他人在事后所述,您看到垃圾的原因是
sum
未初始化,并且包含内存中的任何内容。它可以是任何东西,如果将它与
sum=square+sum
一起使用,则会在未初始化的值上加上平方。

使用
0
初始化
sum
,否则它包含任意数据:

sum = 0;

请参阅:

使用
0
初始化
sum
,否则它包含任意数据:

sum = 0;

请参阅:

您永远不会初始化
sum
的值

第一次运行代码时

sum = square + sum;
由于未初始化,
sum
(右侧)的值为任意数。因此,
sum
(左侧)的结果值是任意数加上
平方


只需添加一个
sum=0
语句,就像您已经为
count
square
添加的语句一样。

您永远不会初始化
sum
的值

第一次运行代码时

sum = square + sum;
由于未初始化,
sum
(右侧)的值为任意数。因此,
sum
(左侧)的结果值是任意数加上
平方


只需添加一个
sum=0
语句,就像您已经为
count
square
添加的语句一样。

sum未初始化

sum未初始化

立即,您不会将“sum”初始化为任何值

编辑:一个经过清理的版本,尽管取决于编译器,您可能需要强制C99模式,否则较旧的编译器可能不支持
for
循环中的初始声明

#include <stdio.h>

int main()
{

    const int COUNT_MAX = 10;
    int sum = 0;

    for ( int i = 1; i <= COUNT_MAX; ++i )
    {
        sum += i*i;
    }

    printf("The sum of squares from 1 to 10 is: %d\n", sum);

    return 0;
}
#包括
int main()
{
常量整数计数_MAX=10;
整数和=0;

对于(inti=1;i,您不需要立即将“sum”初始化为任何值

编辑:一个经过清理的版本,尽管取决于编译器,您可能需要强制C99模式,否则较旧的编译器可能不支持
for
循环中的初始声明

#include <stdio.h>

int main()
{

    const int COUNT_MAX = 10;
    int sum = 0;

    for ( int i = 1; i <= COUNT_MAX; ++i )
    {
        sum += i*i;
    }

    printf("The sum of squares from 1 to 10 is: %d\n", sum);

    return 0;
}
#包括
int main()
{
常量整数计数_MAX=10;
整数和=0;
对于(int i=1;i你应该做:

sum=0;
移除

square=0;
你应该做:

sum=0;
移除

square=0;

欢迎来到StackOverflow。将来,请选择您的代码并单击
101010
按钮,以提供正确的格式。另外,请单击答案左侧的大勾号,选择一个“正确”答案。不这样做被认为是不礼貌的不-我没有告诉他。我告诉他一旦他满意。当我第一次发布时,我不知道接受的全部内容,后来被拷问了。@pm100。谢谢你的建议。我不认为这是在说lol。事实上,知道什么是礼节并不容易,所以谢谢…@Tyler。谢谢。下次我问问题时我会找那个按钮。欢迎来到StackOverflow。以后,请选择请输入您的代码,然后单击
101010
按钮以提供正确的格式。另外,请通过单击左侧的大勾号选择一个答案作为“正确”答案。不这样做被认为是不礼貌的。不,我不是在责备他。我是在告诉他一旦他满意了该怎么做。我不知道接受的整个过程当我第一次发帖子的时候-后来被拷问了。@pm100..谢谢你的建议..我不认为这是在说lol。事实上,知道礼节是什么并不容易,所以谢谢…@Tyler..谢谢..下次我问一个问题的时候我会找那个按钮。@blaxjax:在纯C中,局部变量不会自动初始化为任何特定的东西。在这个C中例如,
sum
等于内存中发生的任何事情,这不是您想要的。@quixoto-感谢您添加到我的答案中并对其进行改进,而不是重复。谢谢SB,以及其他所有回答的人。SB,我勾选了您的回答,因为这是第一个,而且有效。答案很明显,正如我所猜测的,但我自己可能要花一周的时间来解决这个问题……下次,我不会犯这个错误,而是犯另一个错误!@blaxjax:在纯C中,局部变量不会自动初始化为任何特定的值。在这种情况下,
sum
等于内存中该位置发生的任何值,这不是什么你想要。@quixoto-谢谢你对我的答案进行了补充和改进,而不是重复。谢谢某人,以及其他回答的人。SB,我勾选了你的答案,因为这是第一个答案