如何使用scanf输入坐标,以及此函数中需要的字符
我如何让玩家一号输入坐标(x,y)(1,2),同时还能选择输入字符,如“c”或“s” 我可以将x更改为char,然后使用%c作为第一个输入,然后使用if(x=='1')x=1等等,但它仍然会给我分段错误,因为它需要在中扫描某些内容以查找y。我怎样才能解决这个问题如何使用scanf输入坐标,以及此函数中需要的字符,c,C,我如何让玩家一号输入坐标(x,y)(1,2),同时还能选择输入字符,如“c”或“s” 我可以将x更改为char,然后使用%c作为第一个输入,然后使用if(x=='1')x=1等等,但它仍然会给我分段错误,因为它需要在中扫描某些内容以查找y。我怎样才能解决这个问题 matrix[][]是一个全局字符2d数组 void updateTablePlayer1(void) { int y, x; printf ("Enter a command for player 1 ([r
matrix[][]
是一个全局字符2d数组
void updateTablePlayer1(void)
{
int y, x;
printf ("Enter a command for player 1 ([row,col], c, s, p):");
scanf ("%d,%d", &x, &y);
x--;
y--;
if (matrix[x][y]!= ' ')
{
printf ("Invalid selection\n");
updateTablePlayer1();
{
else if (x == 'c')
{
createClearTable();
displayTable();
updateTablePlayer1();
}
else if (x == 's')
{
displayTable();
updateTablePlayer1();
}
else if (x == 'p')
{
displayTableImage();
updateTablePlayer1();
}
else
matrix[x][y] = 'X';
}
您的
scanf
调用正在做两件事:读取一些输入,并将其解释为数字。把这两件事分开:读一个字符串,然后解释它
使用
fgets
而不是scanf
读取字符串可能更好。当您的输入看起来像是包含数字时,您可以使用sscanf
对其进行解码。有一个place callscanf()
-这片土地是邪恶的,周围是鲨鱼,到处是蛇。到处都是饱受折磨的悲伤代码的尸体
有一个更快乐的地方叫做fgets()
-land。它有一些颠簸和陷阱,但安全得多——留着长长的灰色胡须的代码就住在那里
步骤1:刷新输出以确保缓冲不会阻止输入后显示输出 第二步:读这行
// scanf ("%d,%d", &x, &y);
char buffer[80];
if (fgets(buffer, sizeof buffer, stdin) == NULL) Handle_input_closed();
步骤3:解析输入。始终检查错误
int x,y;
char command;
if (sscanf(buffer, "%d,%d", &x, &y) == 2) {
Do_xy_Stuff();
}
else if (sscanf(buffer, " %c", &command) == 1) {
if (command == 'c') Do_c_Stuff();
else if (command == 's') Do_s_Stuff();
else if (command == 'p') Do_p_Stuff();
else Complain_about_bad_input();
} else {
Complain_about_bad_input();
}
使用
scanf
中的返回值。
int x,y;
char command;
if (sscanf(buffer, "%d,%d", &x, &y) == 2) {
Do_xy_Stuff();
}
else if (sscanf(buffer, " %c", &command) == 1) {
if (command == 'c') Do_c_Stuff();
else if (command == 's') Do_s_Stuff();
else if (command == 'p') Do_p_Stuff();
else Complain_about_bad_input();
} else {
Complain_about_bad_input();
}