我正在使用下面的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

09-26 22:07