将字符分配给嵌套循环中的字符变量在 c 中不起作用
Assigning character to a character variable in a nested loop does not work in c
我正在编写代码来生成大学作业的随机排名。程序看起来像这样:
#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: %d\n", 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: %d\n", 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, %c\n", rank, rank2);
}
return 0;
}
当使用嵌套循环或在 if-else 语句中时,我似乎无法将 char 赋值给 char 变量。我可以通过使其不在任何循环或任何语句中来暂时解决这个问题。如果您解释为什么会发生以及如何解决它,将会有很大帮助。
例如这个if语句
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';
}
没有意义。
在任何情况下第一个 if 语句的变量 randnum 中存储什么值并不重要
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) {
此外,定义两个相同的函数也没有什么意义。
您只需要一个 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
陈述是错误的;由于没有任何值可以等于多个不同的值,因此它始终为假。因此,大多数时候你 return 是 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;
}
我正在编写代码来生成大学作业的随机排名。程序看起来像这样:
#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: %d\n", 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: %d\n", 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, %c\n", rank, rank2);
}
return 0;
}
当使用嵌套循环或在 if-else 语句中时,我似乎无法将 char 赋值给 char 变量。我可以通过使其不在任何循环或任何语句中来暂时解决这个问题。如果您解释为什么会发生以及如何解决它,将会有很大帮助。
例如这个if语句
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';
}
没有意义。
在任何情况下第一个 if 语句的变量 randnum 中存储什么值并不重要
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) {
此外,定义两个相同的函数也没有什么意义。
您只需要一个 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
陈述是错误的;由于没有任何值可以等于多个不同的值,因此它始终为假。因此,大多数时候你 return 是 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;
}