如何使用scanf输入坐标,以及此函数中需要的字符

如何使用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

我如何让玩家一号输入坐标(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 ([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 call
scanf()
-这片土地是邪恶的,周围是鲨鱼,到处是蛇。到处都是饱受折磨的悲伤代码的尸体

有一个更快乐的地方叫做
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();

 }