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

时间:2016-08-18 14:24:24

标签: c fgets strtok

我有以下代码尝试为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

1 个答案:

答案 0 :(得分:1)

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

传递给fgets的大小必须包含终止'\0'字符,因此要让fgets读取换行符,您需要一个5字符的缓冲区大小,即

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