我正在使用下面的while循环:
do {
scanf("%c", &turnChoice);
if (turnChoice == 'r')
{
invalidSelection = false;
}
else if (turnChoice == 'h')
{
invalidSelection = false;
}
else
{
printf("Invalid input.\n");
}
} while (invalidSelection == true);
但是,在停止用户输入之前,它只运行一次完整的循环(因此它显示“无效输入”,然后要求用户提供一个字母)。我做错什么了?
最佳答案
我猜你在显示代码之前有一些输入,有些输入以换行结束,对吧?
这里的问题是,当您调用scanf
来读取字符时,换行符仍在输入缓冲区中,因此换行符就是您所读取和获取的内容。
有一个非常简单的“诀窍”告诉scanf
读取并丢弃前导空白(如换行符),也就是在格式字符串前面加上一个空格,因此尝试例如。
scanf(" %c", &turnChoice);
// ^
// |
// Note space here