| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 457 人关注过本帖
标题:输出随机值的原因?
只看楼主 加入收藏
C-入门
Rank: 2
等 级:论坛游民
帖 子:14
专家分:32
注 册:2010-12-29
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:7 
输出随机值的原因?
{
    int a,n,b=0,sum,i;
    printf("请输入a:");
    scanf("%d",&a);
    printf("请输入n:");
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        b=b+a*pow(10,i);
        sum=sum+b;
    }
    printf("sum=%d\n",sum);
    return 0;

}

我这个程序不知道为什么,不给sum赋初值的话,就会输出随机值,这是为什么?
2010-12-30 16:25
御坂美琴
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:魔術の禁書目錄
等 级:小飞侠
威 望:9
帖 子:952
专家分:2929
注 册:2010-8-18
收藏
得分:10 
不给初值的话,那你不就不确定是不是一开始就是你需要的0值吗
既然不确定,那结果是随机就没什么好奇怪了

永远为正义而奋斗,锄强扶弱的Level 5 超能力者
とある魔術の禁書目錄インデックス__御み坂さか美み琴こと
http://bbs.bccn.net/space.php?action=threads&uid=483997
2010-12-30 16:29
我是西瓜
Rank: 2
等 级:论坛游民
帖 子:61
专家分:97
注 册:2010-10-22
收藏
得分:3 
这个随机数是sum的地址吗?
2010-12-30 16:36
C-入门
Rank: 2
等 级:论坛游民
帖 子:14
专家分:32
注 册:2010-12-29
收藏
得分:0 
以下是引用御坂美琴在2010-12-30 16:29:56的发言:

不给初值的话,那你不就不确定是不是一开始就是你需要的0值吗
既然不确定,那结果是随机就没什么好奇怪了
问题是,后面在循环里,我给sum赋值了啊。
2010-12-30 16:39
御坂美琴
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:魔術の禁書目錄
等 级:小飞侠
威 望:9
帖 子:952
专家分:2929
注 册:2010-8-18
收藏
得分:0 
你的赋值方式是sum=sum+b;
sum原来的值你不知道,那么sum+b的结果你能确定不?

永远为正义而奋斗,锄强扶弱的Level 5 超能力者
とある魔術の禁書目錄インデックス__御み坂さか美み琴こと
http://bbs.bccn.net/space.php?action=threads&uid=483997
2010-12-30 16:41
C-入门
Rank: 2
等 级:论坛游民
帖 子:14
专家分:32
注 册:2010-12-29
收藏
得分:0 
我刚才也单步追踪了下,发现是未知。sum根本没被赋值。不知道这是编译器的规定,还是C语言的规定?
2010-12-30 16:46
zdyzhang
Rank: 9Rank: 9Rank: 9
来 自:栖息地
等 级:蜘蛛侠
威 望:4
帖 子:2335
专家分:1227
注 册:2008-9-20
收藏
得分:5 
语法上的初始化是指对象定义时,对应的分配空间之后对于值的操作。C语言中,静态和全局变量默认置0,有初始化列表的复制初始化列表的值到空间(如有不足,剩余部分置0),局部自动变量可以不初始化(调试器参与时可能被隐式地初始化为其它的值("debug magic number"),例如默认情况下Microsoft C/C++ Debugger会把栈中未初始化的字节置为0xCC)。
赋初值一般而言是指逻辑意义上的初始化。在C语言中,由于初始化的语法是“=”后加初值,所以“赋初值”基本上就是指语法上的初始化。不过随着语言的发展,“赋初值”的意义发生了扩大。对有构造语义但又允许不初始化而不产生编译错误的程序设计语言而言,两者有些微妙的差别。例如C++的构造函数中,用若干个成员名和括号括起来的初始化值构成的初始化列表是语法上的初始化(也可能是逻辑意义上的初始化,如果没有被构造函数体内的值覆盖),而构造函数体中对成员的赋值语句是逻辑上的初始化但不是语法上的初始化。
 冰的悸动 错误:
1.“程序开始时进行初始化”的说法仅仅适用于静态或全局变量,而不适于局部自动变量。局部自动变量在函数调用时才能被初始化。
2.“但是根据编译器的不同有些编译器会自动赋初值0或其他”——这在ISO/IEC C语言标准中不是由实现定义的行为,如果一个编译器符合标准,那么行为就是明确的,即视此初始化的对象是否为全局对象来判断隐式初始化置0还是不进行初始化——从下面的函数定义来看这里应该var2是全局变量,会被置0。非标准编译器则另当别论(但是我还没见过会在这点上没事找茬的)。

悲剧源于生活。
2010-12-30 16:55
xzy199999
Rank: 4
等 级:业余侠客
帖 子:326
专家分:286
注 册:2010-11-19
收藏
得分:3 
sum=sum+b;
这就叫赋值了?没有初值 啊大哥

我是初学者
2010-12-30 17:11
快速回复:输出随机值的原因?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012512 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved