C ++ NIM游戏逻辑错误

时间:2014-07-25 01:14:06

标签: c++ setter

**显示无法正常工作,在主要内部实施时不会正确显示电路板。

  
    

这是NIM游戏的更新代码<<     优胜者功能和显示功能无法正常工作**     我需要帮助弄清楚如何使显示功能正常工作。

  
class cboard{

    private:
int sticks;
bool player;

    public:
//default constructor
cboard(){sticks=10;}

//constructor with parameter given
cboard(int x){sticks=x;}

//stick set
void setstick(int m){sticks-=m;}

//display stick getter
int get_sticks(){return sticks;}

//display function, a.k.a baord getter
void displaycboard ()
{for (int i=sticks; i>0; i--)
    {cout<<"| ";}
    cout<<endl;}

};

2 个答案:

答案 0 :(得分:1)

您的displaycboard()正在直接修改类成员变量sticks,在第一个displaycboard()之后将其缩小为0。下次调用displaycboard()时,成员变量sticks为0,表示没有任何内容可以打印出来。

答案 1 :(得分:0)

你的问题在于displaycboard()for循环需要更改不是sticks的变量。

将您的代码更改为

for (int i = sticks; i > 0; i--)
{
...
}

它工作正常。由于在循环中重复调用,它仍然输出两行(因为循环迭代,并且在第一个循环结束时,在第二个循环开始时使用相同数量的条形调用)。

修改:参考有关goto BAD的评论,您可以将其替换为

int s = 0;
while (s <= 2)
{
    cout << "How many... greater than 2" << endl;
    cin >> s;
}

第二次编辑:您的评论反映出您知道这不安全,但您可以使用字符串流(#include <sstream>)和

来处理非int值
std::string instring;

    while (s <= 2)
    {
    cout<<"How many sticks would you like to play with this game (Greater than 2): ";
    getline(cin, instring);
    stringstream(instring) >> s;
    }

这将允许您输入类似1.25的内容并让程序要求新值,或5.25并让它玩5支。请注意,5.99仍然提供5支...