| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 302 人关注过本帖
标题:请帮忙看下这个程序
只看楼主 加入收藏
caochuan2000
Rank: 2
等 级:论坛游民
帖 子:66
专家分:35
注 册:2009-4-11
结帖率:76.47%
收藏
已结贴  问题点数:20 回复次数:4 
请帮忙看下这个程序
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <stdlib.h>
#define cardsize 52
void main()
{
char a[cardsize];
unsigned int seed;
int i=0;
seed=(unsigned int)time(NULL);
srand(seed);
while(i<cardsize)
{
int num=rand()%cardsize;
if((memchr(a,num,i))==0)
{a[i]=num;
i++;
}
}
for(;i>=0;i--)
{printf("%d\n",a[i]);}
}
这是一个定义52张扑克牌,并随即洗牌的程序,可是为什么我每次运行是前面都有个-64?请高手指点下
2009-07-26 21:26
黒渍
Rank: 2
等 级:论坛游民
帖 子:57
专家分:41
注 册:2009-7-16
收藏
得分:0 
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <stdlib.h>
#define cardsize 5
void main()
{
char a[cardsize];
int i=0;
srand((unsigned int)time(NULL));
while(i<cardsize)
{
int num=rand()%cardsize;
if((memchr(a,num,i))==0)
{a[i]=num;
i++;
}
}
for(i=0;i<cardsize;i++)/*从第一位开始输出就没问题了*/
{printf("%d\n",a[i]);}
}

踏实学C
/*我的编程飞信群:9401431 互相学习,共同进步*/
2009-07-26 22:46
caochuan2000
Rank: 2
等 级:论坛游民
帖 子:66
专家分:35
注 册:2009-4-11
收藏
得分:0 
谢谢,不过我想知道为什么用
for(;i>=0;i--)
{printf("%d\n",a[i]);}
第1位会产生-64,是如何产生的?
2009-07-26 23:16
prankmoon
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:161
专家分:921
注 册:2009-7-21
收藏
得分:20 
-64是因为数组越界产生的。因为 while 循环结束后 i == 52,而 a[52] 已经不是你所控制的范围了。
2009-07-26 23:45
caochuan2000
Rank: 2
等 级:论坛游民
帖 子:66
专家分:35
注 册:2009-4-11
收藏
得分:0 
懂了,谢谢!
2009-07-27 00:09
快速回复:请帮忙看下这个程序
数据加载中...
 
   



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

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