好的,我一直试图破解这个问题一段时间了。我很确定我缺乏关于字符串和字符如何在C中工作的某种基本知识。
我有一种方法,我可以在跳棋板上获取移动的坐标。因此,用户应输入A1,B2以表示他们想要从方形A1移动到B2。它看起来像这样:
void get_desired_move(void)
{
char Ocol,
Orow,
Dcol,
Drow,
format;
char move[7];
printf("Please enter your next move (Origin Coordinate, Destination Coordinate): ");
gets(move);
endl(); // method I wrote for line break
sscanf(move, "%c%c%c %c%c", &Ocol, &Orow, &format, &Drow, &Dcol);
if(format == ',')
validate_input(&Ocol, &Orow);
}
然后validate_input():
int validate_input(char *col, char *row)
{
int colInt = *col-0x041;
int isDig = isValidDigit(row);
int rowInt = atoi(row);
if(rowInt >=1 && rowInt <=8 && colInt >= 1 && colInt <= 8)
{
if(atoi(row) > 0 && atoi(row) < 8)
{
return true;
}
}
当来自get_desired_move()
的Orow被传递到validate_input
中的*行时,它会添加从Ocol传递给它的任何字母。所以在调试器中我可以看到
Dcol char '2' Drow char 'B' format char ',' move char [7] Ocol char 'A' Orow char '1'
一旦我到达validate_data()
突然排了:
row char * 0xbffff20a "1A" col char * 0xbffff20b "A" colInt int -1073745399
为什么A被添加到我的1?是因为我没有char指针行的空终止符吗?如果是这样,我该如何解决这个问题呢? isValidDigit是我拥有的循环char数组的方法,因为添加了“A”它失败了......不要太提及它让我疯狂,我无法理解发生了什么。感谢大家。
编辑
好的,在帮助之后(感谢!)我对C中传递的东西有了更好的了解,并且还意识到我有更多需要学习的东西。无论哪种方式,我修改后的validate_input方法现在看起来像这样:
bool validate_input(char row, char col)
{
if(&& atoi(&row) >=1 && atoi(&row) <=8 && col >= 'A' && col <= 'H')
{
return true;
}
else return false;
}
@ Bit Fiddling Code Monkey谢谢!
答案 0 :(得分:1)
你非常复杂的事情。这将解决问题(假设您已正确扫描stdin
输入):
// Rows: 1 to 8
// Cols: A to H
bool validate_input(char col, char row)
{
if((col >= 'A') && (col <= 'H') && (row >= '1') && (row <= '8'))
return true;
else
return false;
}
注意: