【问题标题】:Why does printing this character value produce a number?为什么打印这个字符值会产生一个数字?
【发布时间】:2012-04-07 20:26:18
【问题描述】:
#include <ctime>
#include <cstdlib>
#include <iostream>
using namespace std;


int main()
{
  // initialize the computer's random number generator
  srand(time(0)); rand();

  // declare variables
  char c1;
  char c2;
  char c3;

  c1 = 'R';
  c2 = 'P';
  c3 = 'S';

  // start loop
  while (true)
  {

    // determine computer's choice
    int result = rand() % 3; // 0 or 1 or 2

    if (result == 0) 
      result = c1;

    if (result == 1) 
      result = c2;

    if (result == 2) 
      result = c3;

    // prompt for, and read, the human's choice

    char humanChoice;
    cout << "Rock, Paper, or Scissors? [R/P/S or Q] ";
    cin >> humanChoice;
    cin.ignore(1000, 10);

    // if human wants to quit, break out of loop
    if (humanChoice == 'Q') break;


    // print results
    cout << result << endl;
    cout << humanChoice << endl;

  // end loop
  }

  // end program 



  return 0;
}

大家怎么了?我正在进行我的中期项目的第一步,即创建一个石头剪刀布游戏。这只是开始,我还远未完成,但我已经遇到了错误。当我编译并运行它时,我知道计算选择了数字 83,它必须是 r p 或 s。有谁知道我哪里出错了?

【问题讨论】:

  • 您的结果是 int,而不是 char。
  • 与您的问题无关:当您的意思是 '\n' 时,永远不要说 endl。在您的情况下,您在打印 result 后不必要地刷新输出流。

标签: c++ loops random


【解决方案1】:

resultint 类型(因此它被 cout 解释为十进制数),您的意思是它具有类型 char(以便将其解释为文本字符)。

您还“超载”了结果,首先保留rand() % 3 的值,然后再保留字符值。通常,最好将变量分开以提高可读性 - 优化器可以计算出为它们重用相同的存储空间以节省堆栈空间。

试试这个:

char result;

switch (rand() % 3)
{
case 0: result = c1; break;
case 1: result = c2; break;
case 2: result = c3; break;
}

【讨论】:

  • C++ 有很多隐式类型转换。您看到的是 ASCII 值。
  • @Mike:不一定,但很有可能。 :)
【解决方案2】:

resultint,它将存储(并打印)您分配给它的字符的数字表示。

有多种方法可以解决此问题,一种是将result 更改为char。您仍然可以在其中存储数字(限制为 0-255),并且会得到正确的输出。

恕我直言,更好的方法是稍微重构一下,首先获得人工输入,然后根据计算机的选择采取行动(最好使用switch)。

【讨论】:

    【解决方案3】:

    83 指的是 's' 的 unicode 值。由于 result 是一个 int,因此当您将 char 's' 分配给 result 时,它会被强制转换为一个 int。因此,它输出 83。

    尝试为输出使用不同的变量。例如:

    char response;
    if(result==0)
        response = c1;
    ...
    cout << response << end1
    

    【讨论】:

    • 谢谢你们,真的很感激!我很困惑 83 是从哪里来的,哈哈。
    【解决方案4】:

    您正在接受的输入是 char 类型。将其转换为整数将为您提供相关字符的 ASCII 值。 P 的 ascii 值为 80,R 为 82,S 为 83。

    最好使用带有 switch-case 语句的枚举:

    enum Choices { ROCK, PAPER, SCISSORS };
    

    【讨论】:

      【解决方案5】:

      cout

      【讨论】:

        猜你喜欢
        • 2021-03-14
        • 1970-01-01
        • 2015-02-21
        • 2014-08-23
        • 1970-01-01
        • 2020-11-08
        • 2010-12-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多