c语言发牌洗牌程序问题!急求!!
程序写出来能通过,但是exe文件一运行就会卡住,哪位高手帮忙改改!!#include<stdio.h>#include<math.h>#include<stdlib.h>...
程序写出来能通过,但是exe文件一运行就会卡住,哪位高手帮忙改改!!
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>
int main()
{int card[52];
int a,j,n,i=0,nosame=1;
char c;
while(i<52)
{
a=getnum();
for(j=0;j<i;j++);
{if(card[j]==a){nosame=0;break;};};
if(nosame)continue;
else card[i]=a;
}
for(j=0;j<52;j++)
{
if(card[j]>0&&card[j]<14) {c=3;n=card[j];}
else if(card[j]>13&&card[j]<27) {c=4;n=card[j]-13;}
else if(card[j]>26&&card[j]<40) {c=5;n=card[j]-26;}
else {c=6;n=card[j]-39;}
}
putchar(c);
switch(n)
{case 11:putchar('J');break;
case 12:putchar('Q');break;
case 13:putchar('K');break;
defult:printf("%d\t",n);}
if(j%13==12)putchar('\n');
}
int getnum()
{int a;
randomize();
a=rand()%52+1;
return a;
} 展开
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>
int main()
{int card[52];
int a,j,n,i=0,nosame=1;
char c;
while(i<52)
{
a=getnum();
for(j=0;j<i;j++);
{if(card[j]==a){nosame=0;break;};};
if(nosame)continue;
else card[i]=a;
}
for(j=0;j<52;j++)
{
if(card[j]>0&&card[j]<14) {c=3;n=card[j];}
else if(card[j]>13&&card[j]<27) {c=4;n=card[j]-13;}
else if(card[j]>26&&card[j]<40) {c=5;n=card[j]-26;}
else {c=6;n=card[j]-39;}
}
putchar(c);
switch(n)
{case 11:putchar('J');break;
case 12:putchar('Q');break;
case 13:putchar('K');break;
defult:printf("%d\t",n);}
if(j%13==12)putchar('\n');
}
int getnum()
{int a;
randomize();
a=rand()%52+1;
return a;
} 展开
1个回答
展开全部
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>
int main() {
int card[52];
int a,j,n,i=0,nosame=1;
char c;
randomize(); //只要初始化一次就行,否则一秒内的随机数是一样的
while(i<52) {
a = rand()%52+1;
nosame=1; //nosame每次循环都要重置一下
for(j=0;j<i;j++) {
if(card[j]==a) {
nosame=0;
break;
}
}
if(nosame) card[i++]=a; //是nosame的时候才可以放牌,i这时要加1
}
for(j=0;j<52;j++) {
if(card[j]>0&&card[j]<14) {c=3;n=card[j];}
else if(card[j]>13&&card[j]<27) {c=4;n=card[j]-13;}
else if(card[j]>26&&card[j]<40) {c=5;n=card[j]-26;}
else {c=6;n=card[j]-39;}
putchar(c);
switch(n) {
case 11:putchar('J');break;
case 12:putchar('Q');break;
case 13:putchar('K');break;
default:printf("%d", n);
}
printf("\t",n);
if(j%13==12)putchar('\n');
} //这些输出都应该放在for中,才能输出52张牌
return 0;
}
给你改了下,自己看看,主要是rand初始化只要一次就行,否则会长时间重复,每一秒只能随机出一个数,所以才会卡住。
逻辑上也有点问题,但是都改过来了,VS下运行没有问题,可以看图
#include <math.h>
#include <stdlib.h>
#include <time.h>
int main() {
int card[52];
int a,j,n,i=0,nosame=1;
char c;
randomize(); //只要初始化一次就行,否则一秒内的随机数是一样的
while(i<52) {
a = rand()%52+1;
nosame=1; //nosame每次循环都要重置一下
for(j=0;j<i;j++) {
if(card[j]==a) {
nosame=0;
break;
}
}
if(nosame) card[i++]=a; //是nosame的时候才可以放牌,i这时要加1
}
for(j=0;j<52;j++) {
if(card[j]>0&&card[j]<14) {c=3;n=card[j];}
else if(card[j]>13&&card[j]<27) {c=4;n=card[j]-13;}
else if(card[j]>26&&card[j]<40) {c=5;n=card[j]-26;}
else {c=6;n=card[j]-39;}
putchar(c);
switch(n) {
case 11:putchar('J');break;
case 12:putchar('Q');break;
case 13:putchar('K');break;
default:printf("%d", n);
}
printf("\t",n);
if(j%13==12)putchar('\n');
} //这些输出都应该放在for中,才能输出52张牌
return 0;
}
给你改了下,自己看看,主要是rand初始化只要一次就行,否则会长时间重复,每一秒只能随机出一个数,所以才会卡住。
逻辑上也有点问题,但是都改过来了,VS下运行没有问题,可以看图
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询