使用C进行Do-while循环

时间:2015-09-26 02:28:02

标签: c while-loop scanf

我在下面使用了一个while循环:

do {

    scanf("%c", &turnChoice);

    if (turnChoice == 'r')
    {
        invalidSelection = false;
    }

    else if (turnChoice == 'h')
    {
        invalidSelection = false;
    }

    else
    {
        printf("Invalid input.\n");
    }

} while (invalidSelection == true);

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

3 个答案:

答案 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);