2010-04-03 2 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

실제로 이것은 약간의 코드만으로는 의미가 있는지 모르겠다. 그래서 나는 스도쿠 게임을하고 있는데, 기본적으로 사용자 입력이 필요할 때마다 "enter 이동 " 어떤 종류의 오류가 있으면 그 오류를 진술 한 다음 이전에 보드를 다시 인쇄하고 이동을 묻는 메시지가 나타납니다. 내 논리에 여기 어딘가에 결함이 있습니다 :/ – codefail

답변

1

cinclear 멤버 함수, 그것은 설정 얻을 수있는 스트림의 에러 플래그 (재설정 예를 들어 정수를 읽으려고했지만 입력에 숫자가 아닌 문자가 있기 때문에). 다음 줄 바꿈까지 입력 내용을 정말로 버리고 싶습니다. 이 작업을 수행하는 한 가지 방법은 '\ n'을 구분 기호로 사용하여 cin.ignore으로 전화하는 것입니다.

문제가 될 수있는 또 다른 사항은 (질문에 코드가 남을 수 있음)) 오류가 없을 때까지 입력을 반복적으로 요청하기 위해 작성한 while(true) 루프가 보드를 포함하지 않는다는 것입니다 귀하가 귀하의 코멘트에 대해 이야기하는 논리를 다시 그리십시오. 따라서 getCoords 함수가 오류가없는 입력을 찾고 리턴 할 때까지는 이것을 볼 수 없습니다.

+0

Ah , 그래, 그게 문제의 일부라고 생각 했어. – codefail

관련 문제