|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int b[55];
char *d[55];
int *all(void);
int *all()
{
int i;
static int a[1024];
int c[54];
for(i = 0;i < 54;i++)
{
a[i] = i+1;
c[i] = i+1;
}
return c;
}
void random(/*char */);
void random(/*char a*/)
{
/*if(a == 'Y')
{*/
int i = 0;
int j,u;
int k = 0;
time_t t;
srand((unsigned)time(&t));// 使用当前时间值初始化伪随机数种子序列
while( i <= 53)
{
u = rand() % 54 ;
//printf("%d\n",u);
if(i == 0)
{
b[i] = u;
//printf("%d\n",b[i]);
i++;
}
else
{
for(j = 0;j < i;j++)
{
if(b[j] == u)
{
k = 0;
break;//break与continue在此处都是直接跳出for循环!!!
}
else
{
k = 1;
}
}
if(k == 1)
{
b[i] = u;
// printf("%d \n", b[i]);
i++;
}
}
}
}
void fapai(char);
void fapai(char a)
{
if(a == 'Y')
{
int *c = &b[0];
int i,u,j=0;
for(i = 0;i < 3;i++)
{
switch(j)
{
case 0: printf("风间\t");break;
case 17:printf("\n小新\t");break;
case 34:printf("\n甲鱼\t");break;
}
for(u = 0;u < 18;u++)
{
if(*c < 40)
{
switch(*c / 10)
{
case 0:printf("红心%d\t",*c+1);break;
case 1:printf("方片%d\t",*c%10+1);break;
case 2:printf("黑桃%d\t",*c%20+1);break;
case 3:printf("梅花%d\t",*c%30+1);break;
}
}
else
{
switch(*c)
{
case 40:printf("红心J\t");break;
case 41:printf("红心Q\t");break;
case 42:printf("红心K\t");break;
case 43:printf("方片J\t");break;
case 44:printf("方片Q\t");break;
case 45:printf("方片K\t");break;
case 46:printf("黑桃J\t");break;
case 47:printf("黑桃Q\t");break;
case 48:printf("黑桃K\t");break;
case 49:printf("梅花J\t");break;
case 50:printf("梅花Q\t");break;
case 51:printf("梅花K\t");break;
case 52:printf("大王\t"); break;
case 53:printf("小王\t"); break;
}
}
*c++;
}
j = j+17;
}
}
}
int main()
{
char a;
printf("%d\n",all());
while(1)
{
printf("是否洗牌(Y\\N):\n");
scanf("%c",&a);
random();
fapai(a);
}
return 1;
}
程序如上,为何运行两次以上会出现两次字符串”是否洗牌“?
解决方案步骤:
清除缓冲区中的剩余字符,可以在读取字符后立即使用getchar()来消耗掉这个换行符。
改变scanf的用法,使其能够忽略缓冲区中的空白字符,包括空格、制表符和换行符。
|
|