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