2014-07-25 115 views
-1

**显示器工作不正常,在主内部实施时不会正确显示板子。C++ NIM游戏逻辑错误

这是为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;} 

}; 
+1

'goto坏;'哦讽刺... – user657267

+0

的意思是显示多功能lmao – user3717385

+0

所以你的问题是你不能有一个以上的答案对同一个问题,但我会看看,并在我的答案的底部添加额外的点 – chrisb2244

回答

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>

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并让它发挥W¯¯非int类型,并ith 5支。请注意,5.99仍然给5支...

+0

顺便说一句,给一个非整数值真的搞砸了这个程序,在这两个实现 – chrisb2244

+0

AHHHHH我明白我做错了什么。非常感谢你,特别是因为这个项目是在晚上结束的时候。关于你的评论,我只是想表明我的教授的多功能性,我意识到它不实用或安全。 – user3717385

+0

我是新来的这个论坛,我刚刚完成了我的项目,你说的事实上工作。但现在我有同样的确切问题,并想知道如果你能帮助我在我的查询。我愿意尽可能提高你的代表当我有资格 – user3717385

1

displaycboard()直接修改类的成员变量sticks,它减少到0的第一displaycboard()后。下次您拨打displaycboard()时,成员变量sticks为0,表示没有任何可打印的内容。