fgets 或 strtok 错误返回不需要的第三行

fgets or strtok error returning unwanted third line

我有以下代码来尝试为 2 个不同的玩家获取 2 个值,但是此代码导致出现不需要的第三行,如下所示。

for(int i = 0; i < 6; i++){
    printf("Player %c>", player);
    fgets(move, 4, stdin);
    y_coord = strtok(move, sp);
    x_coord = strtok(NULL, sp);


    printf("You entered: %s, %s\n", x_coord, y_coord);
    if(player == 'O'){
        player = 'X';
    }
    else{
        player = 'O';
    }
}

输出:

Player O>5 5
You entered: 5, 5
Player X>You entered: (null),

Player O>^C

问题是您只读取了三个字符,这会在输入缓冲区中留下换行符。

传递给 fgets 的大小必须包括终止 '[=12=]' 字符,因此要让 fgets 也读取换行符,您需要 5 字符的缓冲区大小, 即

char move[5];  // Two characters separated by space, plus newline and terminator
...
fgets(move, sizeof(move), stdin);