如何从键盘上读取完整的随机文本,过滤和转换

时间:2017-10-19 16:04:06

标签: c++ casting cin

我正在为学校开发一款Tic Tac Toe游戏,但是以一种实用且结构良好的方式开发一种从键盘上阅读游戏的好方法变得越来越困难。

这就是我所做的:

Human::play() const
{ 
  int pos           
  std::cout << endl << Name << ", please, insert the desirable move:";
                     //^^this is a class atribute
  std::string keyboard;
  std::stringstream ss;

  std::getline(std::cin, keyboard);

  ss << keyboard[0];
  ss >> pos;

  return (pos);
}//end of Human class method *play*

此函数将被调用,我将验证玩家移动是否可接受,因此,看看它是否在 0和8 之间。此外,我想检查是否有&#34; r&#34; &#34; q&#34; 的条目,因为它意味着玩家想要回归一圈或退出游戏。

要检查玩家是否已输入此说明,我这样做:

int playermove = player1.play()
if (playermove == 'q')
    ...

我遇到了麻烦,因为从上面的内容可以看出,当输入一个字符时, pos 会返回0。但是,我没有看到任何实际的解决方案。

你能否建议我替代方案?

1 个答案:

答案 0 :(得分:0)

您可以检查rq,并在false时减去-48(因为ASCII表)。

检查出来:

#include <iostream>
using namespace std;

int main() {
    char tmp;
    cin >> tmp;
    if(tmp == 'q') {
        cout << tmp;
        return 0;
    } else {
        int smth = tmp;
        cout << smth - 48;
        return 0;
    }
    return 0;
}

这将捕获q和数字。然后,您可以通过检查(&gt; -48&amp;&amp;&lt; -39)来检查(smth - 48)是否在0-9范围内。