啊哈磊_编程从这里起步

标题: 这随机函数对x有用却对y不起作用 [打印本页]

作者: 福华    时间: 2015-7-13 20:57
标题: 这随机函数对x有用却对y不起作用
本帖最后由 福华 于 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

作者: 初学C    时间: 2015-7-14 07:19
#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
作者: 4399APPLE    时间: 2015-7-14 08:57
不要srand两次
作者: rosynirvana    时间: 2015-7-14 19:47
跑两次算啥,至少放循环里面跑20次吧
另外%d是int的占位符,用来输出long long是不合适的
作者: zhuzhu81998    时间: 2015-7-14 19:51
rosynirvana 发表于 2015-7-14 19:47
跑两次算啥,至少放循环里面跑20次吧
另外%d是int的占位符,用来输出long long是不合适的

那请问gcc中long long int和long double类型在scanf和printf中怎样输出和输入
作者: rosynirvana    时间: 2015-7-14 21:43
zhuzhu81998 发表于 2015-7-14 19:51
那请问gcc中long long int和long double类型在scanf和printf中怎样输出和输入

这和gcc没关系,取决于用的libc
作者: zhuzhu81998    时间: 2015-7-14 21:54
rosynirvana 发表于 2015-7-14 21:43
这和gcc没关系,取决于用的libc

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

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

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

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

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

什么叫做70年代的库,你是说啊哈C的核心是70年代的吗?
作者: rosynirvana    时间: 2015-7-15 20:42
福华 发表于 2015-7-15 19:53
什么叫做70年代的库,你是说啊哈C的核心是70年代的吗?

stdio是70年代的库,差不多60年代末70年代初的设计吧
作者: 福华    时间: 2015-7-15 22:41
rosynirvana 发表于 2015-7-15 20:42
stdio是70年代的库,差不多60年代末70年代初的设计吧

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

这和ahaC无关,C标准库就是那时候设计的,无解
作者: The Death    时间: 2020-3-17 00:28
                                                  
作者: 嘟嘟编程    时间: 2020-3-24 16:27
srand一次就够了                                                                                                                    




欢迎光临 啊哈磊_编程从这里起步 (https://bbs.codeaha.com/) Powered by Discuz! X3.2