0

我正在编写代码来为大学作业生成随机排名。程序如下所示:

#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 变量。我可以通过使它不在任何循环或任何语句中来临时解决这个问题。如果您解释为什么会发生这种情况以及如何解决它,将会有很大帮助。

4

2 回答 2

0

你只需要一个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陈述是错误的;因为没有一个值可以等于多个不同的值,所以它总是为假的。正因为如此,大多数时候你在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;
}
于 2022-02-14T18:16:11.303 回答
0

例如这个 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) {

定义两个相同的函数也没有什么意义。

于 2022-02-14T18:00:35.213 回答