我在下面使用了一个while循环:
do {
scanf("%c", &turnChoice);
if (turnChoice == 'r')
{
invalidSelection = false;
}
else if (turnChoice == 'h')
{
invalidSelection = false;
}
else
{
printf("Invalid input.\n");
}
} while (invalidSelection == true);
但是,在停止用户输入之前,它会运行一次完整循环(因此它会显示"输入无效"然后要求用户输入一个字母)。我做错了什么?
答案 0 :(得分:5)
我的猜测是你在显示的代码之前有一些输入,有些输入以换行符结束,对吗?
这里的问题是当你调用scanf
来读取一个字符时,换行符仍然在输入缓冲区中,所以换行符就是你读取和获取的内容。
有一个非常简单的“技巧”告诉scanf
读取并丢弃前导空格(如换行符),即将单个空格添加到格式字符串,请尝试例如
scanf(" %c", &turnChoice);
// ^
// |
// Note space here
答案 1 :(得分:1)
在输入字符后,我们需要采取' \ n'通过按下输入按钮
给予的char char turnChoice;
bool invalidSelection = true;
do {
scanf("%c", &turnChoice);// if you want to give leading space then use scanf(" %c",&turnChoice);
getchar();
if (turnChoice == 'r')
{
invalidSelection = false;
}
else if (turnChoice == 'h')
{
invalidSelection = false;
}
else
{
printf("Invalid input.\n");
}
} while (invalidSelection == true);
答案 2 :(得分:0)
当你扫描放置"%* c"这可能会有所帮助。在您的第一个字符后忽略输入输入后输入的输入键。代码如下:
do {
scanf("%c%*c", &turnChoice);
if (turnChoice == 'r')
{
invalidSelection = false;
}
else if (turnChoice == 'h')
{
invalidSelection = false;
}
else
{
printf("Invalid input.\n");
}
} while (invalidSelection == true);