我正在编写一个代码,为大学作业生成随机排名。程序看起来是这样的:
#include <conio.h>
#include <ctype.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
char rankgen()
{
char rank;
int randnum = (rand() % 13) + 1;
// printf("randnum: %dn", randnum);
if (randnum != 1 || randnum != 11 || randnum != 12 || randnum != 13
|| randnum != 10) {
rank = randnum + '0';
} else {
if (randnum == 10)
rank = 1 + '0';
else if (randnum == 1)
rank = 'A';
else if (randnum == 11)
rank = 'J';
else if (randnum == 12)
rank = 'Q';
else if (randnum == 13)
rank = 'K';
}
return rank;
}
char rankgen2()
{
char rank;
int randnum = (rand() % 13) + 1;
// printf("randnum: %dn", randnum);
if (randnum != 1 || randnum != 11 || randnum != 12 || randnum != 13
|| randnum != 10) {
rank = randnum + '0';
}
if (randnum == 10)
rank = 1 + '0';
if (randnum == 1)
rank = 'A';
if (randnum == 11)
rank = 'J';
if (randnum == 12)
rank = 'Q';
if (randnum == 13)
rank = 'K';
return rank;
}
int main()
{
srand(time(NULL));
for (int i = 0; i < 30; i++) {
char rank = rankgen();
char rank2 = rankgen2();
printf("%c, %cn", rank, rank2);
}
return 0;
}
在使用嵌套循环或if-else语句时,似乎无法将char分配给char变量。我可以通过使它不在任何循环或任何语句中来暂时解决这个问题。如果你能解释为什么会发生这种情况以及如何修复它,那会有很大帮助
您只需要一个rankgen
函数(因为它们做的事情完全相同(,它应该看起来像这样:
char rankgen()
{
char rank;
int randnum = (rand() % 13) + 1;
if (randnum == 1)
rank = 'A';
else if (randnum == 10)
rank = 'T';
else if (randnum == 11)
rank = 'J';
else if (randnum == 12)
rank = 'Q';
else if (randnum == 13)
rank = 'K';
else
rank = randnum + '0';
return rank;
}
请注意,正如@EugeneSh所指出的,最初的if
语句是错误的;由于没有一个值可以等于多个不同的值,因此它将始终为false。正因为如此,大多数时候您都会在rank
中返回一个垃圾值。此外,我不确定你的== 10
案例是什么意思,但我把它改成了字符"T"(表示"十"(。
你也可以用这样的switch语句来实现这一点:
char rankgen()
{
char rank;
int randnum = (rand() % 13) + 1;
switch (randnum) {
case 1:
rank = 'A';
break;
case 10:
rank = 'T';
break;
case 11:
rank = 'J';
break;
case 12:
rank = 'Q';
break;
case 13:
rank = 'K';
break;
default:
rank = randnum + '0';
break;
}
return rank;
}
例如,如果语句
if (randnum != 1 || randnum != 11 || randnum != 12 || randnum != 13
|| randnum != 10) {
rank = randnum + '0';
} else {
if (randnum == 10)
rank = 1 + '0';
else if (randnum == 1)
rank = 'A';
else if (randnum == 11)
rank = 'J';
else if (randnum == 12)
rank = 'Q';
else if (randnum == 13)
rank = 'K';
}
没有道理。
变量randnum中存储了什么值并不重要——在任何情况下,第一个if语句都是
if (randnum != 1 || randnum != 11 || randnum != 12 || randnum != 13
|| randnum != 10) {
rank = randnum + '0';
将获得控制权。
你的意思似乎是
if (randnum != 1 && randnum != 11 && randnum != 12 && randnum != 13
&& randnum != 10) {
同样,定义两个相同的函数也没有什么意义。