使用C进行Do-while循环

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)

但是,在停止用户输入之前,它会运行一次完整循环(因此它显示"无效输入",然后要求用户输入一个字母).我究竟做错了什么?

Som*_*ude 5

我的猜测是你显示的代码之前有一些输入,有些输入以换行符结束,对吧?

这里的问题是当你打电话scanf来读取一个字符时,换行符仍然在输入缓冲区中,所以换行符就是你读取和获取的内容.

有一个非常简单的"技巧"告诉scanf读取和丢弃领先的空白区域(如换行符),那就是在格式字符串前加一个空格,所以试试eg

scanf(" %c", &turnChoice);
//     ^
//     |
// Note space here
Run Code Online (Sandbox Code Playgroud)