我是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.的经历,这很奇怪。直到约会。请解释一下该计划正在做什么。
这是发布此类问题的正确位置。对吗?
答案 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
存储类的本地变量。当您保留未初始化的变量时,尝试读取它的值将被视为未定义的行为。
问题是您将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