2010-04-03 84 views
0

实例用户输入:错误不能正确打印。这个逻辑流程是否正确? C++

PA1 9 //correct 
PJ1 9 //wrong, error printed "Invalid row" because it is not between A and I 
PA11 9 //wrong, error printer "Invalid column" because it is not between 1 and 9. 

我遇到的问题是,它应该清除剩余的输入,然后要求用户输入“移动”了,而事实并非如此。

我哪里错了?我一直在这一段时间,仍然没有得到进展..

void clearInput() 
{ 
cin.clear(); 
} 

bool getCoords(int & x, int & y) 
{ 
char row; 

while(true){ 
cin>>row>>y; 
row=toupper(row); 

if(/*(id=='P' || id=='p' || id=='D' || id=='d') && */row>='A' && row<='I' && isalpha(row) && y>=1 && y<=9){ 
    x=row-'A'; 
    y=y-1; 
    return true; 
} 

else if(!(y>=1 && y<=9)){ 
    cout<<"Invalid column\n"<< endl << endl; 
    cout<<y; 
    clearInput(); 
    cout<<y; 
    //return false; 
} 
else{ 
    cout<<"Invalid row\n"<< endl << endl; 
    clearInput(); 
    //cout<<x<<y; 
    //return false; 
} 
} 
} 
+0

实际上,我不知道这是否只是一点代码有意义.. 因此,我正在研发一款Sudoku游戏,基本上每当需要任何类型的用户输入时,它都会询问“enter一个移动“ 如果有任何一种错误,它应该说明错误,然后再次打印板,因为它是以前,并要求输入一个移动.. 我的逻辑是有缺陷的地方在这里:/ – codefail 2010-04-03 20:31:57

回答

1

cinclear成员函数不清除剩余的输入,它重置流的错误标志(可以被置例如,因为您试图读取一个整数,但输入中有非数字字符)。我想你真的想放弃直到下一个换行符的输入;一种方法是使用'\ n'作为分隔符来调用cin.ignore

另一件可能成为问题的事情(但可能只是代码在问题中被遗漏;))是您已经写过的while(true)循环反复要求输入,直到没有错误才包含板 - 你在评论中谈论的重新绘制逻辑。因此,直到getCoords函数找到无错误的输入并返回时,才会看到它。

+0

啊,是的,我认为这是问题的一部分。 – codefail 2010-04-03 20:45:50