Sch*_*999 0 c scanf while-loop
我在下面使用while循环:
do {
scanf("%c", &turnChoice);
if (turnChoice == 'r')
{
invalidSelection = false;
}
else if (turnChoice == 'h')
{
invalidSelection = false;
}
else
{
printf("Invalid input.\n");
}
} while (invalidSelection == true);
Run Code Online (Sandbox Code Playgroud)
但是,在停止用户输入之前,它会运行一次完整循环(因此它显示"无效输入",然后要求用户输入一个字母).我究竟做错了什么?
我的猜测是你在显示的代码之前有一些输入,有些输入以换行符结束,对吧?
这里的问题是当你打电话scanf来读取一个字符时,换行符仍然在输入缓冲区中,所以换行符就是你读取和获取的内容.
有一个非常简单的"技巧"告诉scanf读取和丢弃领先的空白区域(如换行符),那就是在格式字符串前加一个空格,所以试试eg
scanf(" %c", &turnChoice);
// ^
// |
// Note space here
Run Code Online (Sandbox Code Playgroud)