注册 登录
编程论坛 C语言论坛

[C语言]为什么srand((unsigned)time(NULL));要和int d1,d2,c1,c2,i,j;的顺序过来才可以运行?

w208152499 发布于 2020-06-05 14:10, 2638 次点击
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{srand((unsigned)time(NULL));
    int d1,d2,c1,c2,i,j;
   
    c1=0;c2=0;
    for(i=1;i<=50;i++)
    {d1=0;d2=0;
        for(j=1;j<=5;j++)
        
        {
        d1=d1+rand()%6+1;d2=d2+rand()%6+1;
        }if(d1>d2)c1++;else if(d1<d2)c2++;
   
    }
    if(c1>c2)printf("第一个玩家赢了!");
    else
        if(c1<c2)printf("第二个玩家赢了!");
        else printf("平局");return 0;

}




#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
    int d1,d2,c1,c2,i,j;
srand((unsigned)time(NULL));
   
    c1=0;c2=0;
    for(i=1;i<=50;i++)
    {d1=0;d2=0;
        for(j=1;j<=5;j++)
        
        {
        d1=d1+rand()%6+1;d2=d2+rand()%6+1;
        }if(d1>d2)c1++;else if(d1<d2)c2++;
   
    }
    if(c1>c2)printf("第一个玩家赢了!");
    else
        if(c1<c2)printf("第二个玩家赢了!");
        else printf("平局");return 0;

}
只有本站会员才能查看附件,请 登录
后面换位置可以运行但是我不知道第一种情况错在哪里
7 回复
#2
fulltimelink2020-06-05 16:41
应该不会,你图片上错误提示和你代码对不上,确认下你IDE里5行和6行的代码吧
#3
forever742020-06-05 16:57
老标准C要求在每个函数或复合语句的开头首先声明局部变量,然后才能写其他语句。
我本人也一直是坚持这么干的。
#4
w2081524992020-06-05 18:25
回复 2楼 fulltimelink
我代码发的第一个是错误的,运行之后就是照片里面那个错误,第二个代码是正确的可以很好的运行,但问题是srand((unsigned)time(NULL));在int d1,d2,c1,c2,i,j;前面就不可以了,必须换一下顺序int d1,d2,c1,c2,i,j;在前srand((unsigned)time(NULL));在后面才可以,你可以复制第一个代码试一下,然后换一下那两个的位置再试一下,所以我就不明白为什么会出错
只有本站会员才能查看附件,请 登录

#5
JabinZ2020-06-05 18:57
回复 4楼 w208152499
你的编译器有问题吧, 你这两个代码在我这都可以运行

不过 你这代码风格,属实有些上头啊

[此贴子已经被作者于2020-6-5 18:58编辑过]

#6
w2081524992020-06-08 17:50
回复 5楼 JabinZ
我试了一下在线编译的确都可以,vs2012应该有问题,这是我们老师编译的代码,不知道上头是什么意思,是太简陋吗?还是太粗糙?
#7
JabinZ2020-06-08 18:37
回复 6楼 w208152499
代码太能缩减了,不方便阅读,
#8
bcbbcclbbc2020-06-09 10:58
习惯悄然改变,程序在吸取新知识也同时也放松了一些戒律
1