【问题标题】:C++ Reading in User Input without the commas不带逗号的 C++ 读取用户输入
【发布时间】:2013-01-06 03:01:18
【问题描述】:

我目前正在为我的 C++ 课完成一项家庭作业,以制作多人井字游戏,但我在程序的输入部分遇到了问题(我几乎所有其他东西都在运行)。

无论如何,我的目标是提示当前玩家输入格式 row,col 中的一行和一列。然后我需要将他们的标记放在一个代表游戏板的二维数组中。

我认为我可以简单地使用 cin 将他们的输入读入一个 char 数组,然后在该数组中获取 0 位置和 2 位置,然后我会从他们的输入中获得我的两个数字。但是,如果我这样做,我会得到输入的 ASCII 值,而不是数字(例如,我得到 49 而不是 '1')。

我觉得我可能忽略了一些非常简单的事情,所以任何输入都会非常有帮助并且非常感谢。这是我所拥有的:

void getEntry(char XorO, char gameBoard[GRID_SIZE][GRID_SIZE])
{
    char entry[3];

    cout << XorO << " - enter row,col: ";
    cin >> entry;

    int row = entry[0];
    int col = entry[2];

    //Then I would use the row, col to pass the XorO value into the gameBoard
}

【问题讨论】:

  • 你能用std::string代替吗?

标签: c++ validation input user-input


【解决方案1】:

要得到号码就行了

row = entry[0] - '0';
col = entry[2] - '0';

这将从 ASCII 转换为实际数字。

【讨论】:

  • 哇,这简直太简单了。非常感谢。我不敢相信我花了将近两个小时试图找到答案。我只是好奇,为什么简单地减去 '0' 会将其转换为实际字符?
  • @user2001427 见my anwer ;-)
【解决方案2】:

请注意,您正在读取 char 数组。当您将单个chars 转换为ints 时,您将获得字符'0''1''2' 的ASCII(或Unicode)值,而不是整数值0、@ 987654328@,或2。要转换单个数字,您可以使用 ASCII 代码的一个有用属性:数字字符是连续的。这意味着您可以从任何数字中减去'0' 的代码以获得相应的整数值。例如

row = entry[0] - '0';

【讨论】:

  • 哦,这就解释了,不是减去零,而是减去零的值,这很有意义。谢谢!
  • @user2001427 对于 C++ 程序员来说,了解所使用的数据类型非常重要。将零表示为char ('0') 与将零表示为int (0) 之间存在巨大的差异。任何其他单个数字也是如此。
  • 类型并不重要,这一切都归结为数字:P 你指的是文字值。就编译器和计算机而言,'0' 只是 48。我可以做 char c = 48; 并得到与 char c = '0'; 相同的结果
  • @JesusRamos 这正是char 类型的含义。通过您的示例,键入 does 重要。这就是两次初始化结果相同的原因。
  • @Code-Guru 不是真的,类型只是容器大小(除了改变使用的有符号和无符号的情况),C++ 专注于类型,所以人们忘记了他们实际存储的是什么。 char * 之类的东西不一定是字符串,但也可以是指向您不想解释为字符的字节缓冲区的指针。
【解决方案3】:

operator&gt;&gt; 处理解释数字:

void getEntry(char XorO, char gameBoard[GRID_SIZE][GRID_SIZE])
{
    int row, col;
    char comma;

    cout << XorO << " - enter row,col: ";
    std::cin >> row >> comma >> col; 

    if( (!std::cin) || (comma != ',') ) {
      std::cout << "Bogus input\n";
      return;
    }

    //Then I would use the row, col to pass the XorO value into the gameBoard
}

【讨论】:

    【解决方案4】:
    void getEntry(char XorO, char gameBoard[GRID_SIZE][GRID_SIZE])
    {
        char entry[3];
    
        cout << XorO << " - enter row,col: ";
        cin >> entry;
    
        int row = entry[0] - '0';
        int col = entry[2] - '0';
    
        //if grid_size <= 9
    }
    

    【讨论】:

    • 对,Grid_Size 是一个常量,可以让我将游戏从 3 x 3 更改为 4x4 或更高。
    猜你喜欢
    • 1970-01-01
    • 2016-02-13
    • 1970-01-01
    • 1970-01-01
    • 2013-02-12
    • 1970-01-01
    • 1970-01-01
    • 2019-03-28
    相关资源
    最近更新 更多