搜索
查看: 18904|回复: 16
打印 上一主题 下一主题

这随机函数对x有用却对y不起作用

[复制链接]
跳转到指定楼层
楼主
发表于 2015-7-13 20:57:10 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 福华 于 2015-7-13 20:57 编辑

代码如下:
[mw_shl_code=c,true]#include <stdio.h>
#include <stdlib.h>
int main()
{
        long long x,y;
    srand((unsigned)time(NULL));
    x=rand();
    srand((unsigned)time(NULL));
    y=rand();
    printf("x=%d y=%d\n",x,y);
        system("pause");
        return 0;
}
[/mw_shl_code]
(顺便反映一下,啊哈论坛的一些功能如图片,贴代码,UC浏览器不兼容,IE可以正常使用)
x的值是随机的,但y一直等于0,好奇怪的

咦.PNG (6.6 KB, 下载次数: 11)

咦.PNG

咦2.PNG (6.59 KB, 下载次数: 9)

咦2.PNG
推荐
发表于 2015-7-14 08:57:38 | 只看该作者

回帖奖励 +1

不要srand两次
推荐
发表于 2015-7-14 07:19:23 | 只看该作者

回帖奖励 +1

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
long  x,y;
srand((unsigned)time(NULL));
x=rand();
y=rand();
printf("x=%d y=%d\n",x,y);
system("pause");
return 0;
}
将long long 改成了 long
地板
发表于 2015-7-14 19:47:19 | 只看该作者

回帖奖励 +1

跑两次算啥,至少放循环里面跑20次吧
另外%d是int的占位符,用来输出long long是不合适的
5#
发表于 2015-7-14 19:51:59 | 只看该作者

回帖奖励 +1

rosynirvana 发表于 2015-7-14 19:47
跑两次算啥,至少放循环里面跑20次吧
另外%d是int的占位符,用来输出long long是不合适的

那请问gcc中long long int和long double类型在scanf和printf中怎样输出和输入
6#
发表于 2015-7-14 21:43:19 | 只看该作者
zhuzhu81998 发表于 2015-7-14 19:51
那请问gcc中long long int和long double类型在scanf和printf中怎样输出和输入

这和gcc没关系,取决于用的libc
7#
发表于 2015-7-14 21:54:58 | 只看该作者
rosynirvana 发表于 2015-7-14 21:43
这和gcc没关系,取决于用的libc

那在啊哈C下怎么用呢?
8#
 楼主| 发表于 2015-7-14 22:17:05 | 只看该作者
rosynirvana 发表于 2015-7-14 19:47
跑两次算啥,至少放循环里面跑20次吧
另外%d是int的占位符,用来输出long long是不合适的

我把long long 改掉,用int,并且只srand((unsigned)time(NULL))一次,就对了
9#
发表于 2015-7-15 00:41:16 | 只看该作者
zhuzhu81998 发表于 2015-7-14 21:54
那在啊哈C下怎么用呢?

long long用%I64d
微软的msvcrt环境下long double和double是同一个东西(64位精度IEEE浮点数),正确地做法是不用long double
10#
发表于 2015-7-15 00:43:39 | 只看该作者
本帖最后由 rosynirvana 于 2015-7-15 00:49 编辑
福华 发表于 2015-7-14 22:17
我把long long 改掉,用int,并且只srand((unsigned)time(NULL))一次,就对了

乱打乱撞对理解问题没好处
重置两次随机数种子虽然不合适,但是不应该出现y一直是0的情况
11#
发表于 2015-7-15 00:52:07 | 只看该作者
想了一下大概还真是long long的问题
2个%d占位符会把2个int的数据传过去,后面一个long long是两个int长
看到的x就是产生的随机数的低位,高位一定是0是因为RAND_MAX小,肯定占不到x的高位
至于y根本就没传进去

70年代的库学起来就是奇葩问题多
12#
 楼主| 发表于 2015-7-15 19:53:16 | 只看该作者
rosynirvana 发表于 2015-7-15 00:52
想了一下大概还真是long long的问题
2个%d占位符会把2个int的数据传过去,后面一个long long是两个int长
...

什么叫做70年代的库,你是说啊哈C的核心是70年代的吗?
13#
发表于 2015-7-15 20:42:05 | 只看该作者
福华 发表于 2015-7-15 19:53
什么叫做70年代的库,你是说啊哈C的核心是70年代的吗?

stdio是70年代的库,差不多60年代末70年代初的设计吧
14#
 楼主| 发表于 2015-7-15 22:41:30 | 只看该作者
rosynirvana 发表于 2015-7-15 20:42
stdio是70年代的库,差不多60年代末70年代初的设计吧

推荐一个使用现代库的编译器,随着知识的积累,单靠啊哈C编译器肯定不够
15#
发表于 2015-7-16 00:52:34 | 只看该作者
福华 发表于 2015-7-15 22:41
推荐一个使用现代库的编译器,随着知识的积累,单靠啊哈C编译器肯定不够

这和ahaC无关,C标准库就是那时候设计的,无解
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表