【问题标题】:C++ User inputs a char, the variable stays 0C++用户输入一个字符,变量保持为0
【发布时间】:2018-12-19 19:42:13
【问题描述】:

我正在尝试创建一个井字游戏,其中用户输入一个数字(对应于他想要放置他的 X 或 O 的位置​​),但接收数字的变量 (Move) 保持在 0 no不管输入是什么。你能帮我弄清楚要修复什么,以便变量实际接收用户输入的内容吗?这是接收移动的函数的代码:

int FDeclarations::GetMove(){
int Move;
std::cin >> Move;
return Move;}

这是通过 switch 语句的函数的代码(因为变量“Move”总是为 0,所以没有任何作用)

int FDeclarations::PlaceMove(){
switch (Move)
{
case(1):
    if (turn == false) { TopLeft = 'x'; }
    else { TopLeft = 'o'; }
    break;
case(2):
    if (turn = false) { TopMid = 'x'; }
    else { TopMid = 'o'; }
    break;
case(3):
    if (turn = false) { TopRight = 'x'; }
    else { TopRight = 'o'; }
    break;
case(4):
    if (turn = false) { MidLeft = 'x'; }
    else { MidLeft = 'o'; }
    break;
case(5):
    if (turn = false) { MidMid = 'x'; }
    else { MidMid = 'o'; }
    break;
case(6):
    if (turn = false) { MidRight = 'x'; }
    else { MidRight = 'o'; }
    break;
case(7):
    if (turn = false) { BotLeft = 'x'; }
    else { BotLeft = 'o'; }
    break;
case(8):
    if (turn = false) { BotMid = 'x'; }
    else { BotMid = 'o'; }
    break;
case(9):
    if (turn = false) { BotRight = 'x'; }
    else { BotRight = 'o'; }
    break;
}


table();
    return 0;
}

这是我的变量声明:

        class FDeclarations
{
    public:
        int PlaceMove();
        int GetMove();
        int CheckWin();
        void table();

    private:
        bool turn = false;
        int Move;
        char TopLeft = '1';
        char TopMid = '2';
        char TopRight = '3';
        char MidLeft = '4';
        char MidMid = '5';
        char MidRight = '6';
        char BotLeft = '7';
        char BotMid = '8';
        char BotRight ='9';
        bool XWin;
        bool OWin;
    };

【问题讨论】:

  • 您正在重新定义移动。只需删除您获得输入的int Move
  • '1'1 不同。一个是char,另一个是int
  • 您的 GetMove 函数本身看起来不错,您只是将 FDeclarations::Move 成员与 Move 内部的 Move 局部变量 混淆了GetMove,正在遮蔽该成员。您应该在返回新动作和修改成员Move之间进行选择。
  • 还有if (turn = false) - 这是什么? C++ 中的相等比较由== 运算符表示。
  • 我在你的代码中看不到任何地方你会打电话给你的GetMove。电话在哪里?告诉我们你是怎么称呼它的。

标签: c++ input char cin


【解决方案1】:

在你的函数中

int FDeclarations::GetMove() {
    int Move;
    std::cin >> Move;
    return Move;
}

您声明了一个名为Move 变量,它是该函数的本地变量。这与类中声明的成员变量Move 不同。 C++ 更喜欢绑定到函数级变量。

除非您在未向我们展示的代码中使用GetMove 的返回值设置成员变量Move,否则成员变量Move 将永远不会改变,从而导致您的问题。

【讨论】:

  • 好吧,也许这就是目的!也许 OP 计划将该函数称为Move = GetMove(),其中Move 是成员。在这种情况下,结果将进入成员Move
  • @AnT 当然,就像我说的,“除非你使用返回值......”。有了给出的代码,这是我们能说的最好的了。
  • 这就是为什么一些程序员坚持你使用this->member。这个确切的原因。如果您像这样编写代码,就不会意外地做这些事情。
【解决方案2】:

FDeclarations::GetMove() 中,您需要将类Move 的私有成员设置为用户将输入的任何内容,而不是隐藏成员之一的局部变量。所以一个快速的解决方法是:

int FDeclarations::GetMove(){
    std::cin >> Move;
    return Move;}

【讨论】:

  • 你怎么知道的?也许 OP 计划将该函数称为 Move = GetMove(),其中 Move 是成员。在这种情况下,结果将进入成员Move
猜你喜欢
  • 1970-01-01
  • 2012-12-08
  • 1970-01-01
  • 1970-01-01
  • 2013-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-19
相关资源
最近更新 更多