奇怪的输出?

时间:2017-03-16 15:26:08

标签: c output

我是C.Sc课程的新手,我们学习C课程。

我正在尝试一些基本的东西。目前我正在学习用户定义的功能。

以下代码是我尝试过的代码。我知道这很简单,但我无法理解它为什么产生如此奇怪的输出。

#include <stdio.h>

int add(int a); //function declaration

int main (void)

{
    int b,sum;
    printf("\nEnter a number: ");
    scanf("%d", &b);

    sum = add(b); //function calling

    printf("\nSum: %d\n\n", sum);

}

int add(int a) //function definition    

{
    int result;
    for(int i = 0; i < a; i++)

    {
        result = result + i;
        return result;

    }


} 
  

1的输出是32743

     

2的输出是32594

     

3的输出是32704

奇怪的是每次输出更改对于相同的数字。

考虑到我在C.Sc.的经历,这很奇怪。直到约会。请解释一下该计划正在做什么。

这是发布此类问题的正确位置。对吗?

3 个答案:

答案 0 :(得分:5)

您忘了初始化结果。

temp

解释:如果你没有初始化变量,它会有一个&#34;随机&#34;数字,然后你将得到&#34;随机&#34;输出

: 如果a = 0或negatif数,你也忘了返回一些东西! 而你的主要需要返回一个int。

此外,没有必要进行循环,因为你在它内部返回,你总是会在循环中返回0。

以下是对代码的更正:

int result = 0;

以10为输入:https://ideone.com/6BjM6y

答案 1 :(得分:3)

您需要初始化result

int result = 0;

在您的代码中,result未初始化,因此

result = result + i;

行,您使用result具有的任何值,并且无法确定哪个值是因为它是垃圾值。

在c中,由于性能原因,变量不会自动初始化,除了少数例外,最值得注意的是

  • static存储类的本地变量。
  • 全局变量。

当您保留未初始化的变量时,尝试读取它的值将被视为未定义的行为

回复您的comment

问题是您将0添加到result 0之后返回,因此将return result;移到for循环之外,它应该工作

答案 2 :(得分:1)

您需要初始化变量result。由于它是机器人初始化的,因此编译器使用默认值初始化它,该默认值可能是“ funky” mumber。要解决此问题,请将result函数中的Add()初始化为:

int result = 0;

另一件事:您的return语句位于for循环中。这意味着for循环将在第一个循环结束时终止,因为有一个将终止该函数的return语句。要解决此问题,请将您的功能更改为:

int result;
for(int i = 0; i < a; i++)
{
    result += i; // shorthand way of writing result = result + i. Same end result
}

    return result; // should be outside the loop