C 在执行do…while循环时遇到问题

C 在执行do…while循环时遇到问题,c,C,所以基本上,我试图为输入创建一个简单的缓冲区 如果用户输入的不是字母“R”或“S”,则do while循环将代码返回到用户输入字母的位置 然而,例如,当我尝试输入“Z”时,循环会重复两次,要求在第二个循环上输入 我不明白为什么,请帮我理解 我试过。。。使用while循环?那不行。我不想使用goto <stdio.h> <stdlib.h> int main(void) { char r_or_s; printf("Number Reverser/Shu

所以基本上,我试图为输入创建一个简单的缓冲区

如果用户输入的不是字母“R”或“S”,则do while循环将代码返回到用户输入字母的位置

然而,例如,当我尝试输入“Z”时,循环会重复两次,要求在第二个循环上输入

我不明白为什么,请帮我理解

我试过。。。使用while循环?那不行。我不想使用goto

<stdio.h>
<stdlib.h>

int main(void)
{
    char r_or_s;

    printf("Number Reverser/Shuffler v0.1\t");
    printf("Written by REN\n");
    printf("This program reverses and shuffles the order of numbers.\n\n");

    do
    {

        printf("Would you like to reverse or shuffle numbers? (Press R/S):");
        r_or_s = getchar();
        printf("\n");

        if (r_or_s == 'R')
        {
            reverseno();
        }

        else if (r_or_s == 'S')
        {
            shuffleno();
        }
    } while (r_or_s != 'R' || r_or_s != 'S');

    return 0;
}

内部主(空)
{
字符r_或s;
printf(“数字反转器/洗牌器v0.1\t”);
printf(“由任编写”);
printf(“此程序反转和洗牌数字顺序。\n\n”);
做
{
printf(“您想反转或洗牌号码吗?(按R/S):”;
r_或_s=getchar();
printf(“\n”);
如果(r_或r_s=='r')
{
reverseno();
}
else if(r_或s=='s')
{
shuffleno();
}
}while(r_或_s!='r'| | r_或_s!='s');
返回0;
}
预期产量

您要反转还是洗牌数字?(按右键):

拒绝输入后,但实际输出为:

您要反转还是洗牌数字?(按右键):
您要反转还是洗牌数字?(按R/S):

发生这种情况的原因是,例如,您输入了“Z”,然后还按了Enter键

那么,你输入了多少个字符?两个

然后
getchar()
使用标准输入缓冲区中的“Z”,返回以再次从用户读取,但换行符(Enter)在标准输入缓冲区中等待

因此,
getchar()
现在使用换行符,导致“循环自身重复两次”

你也必须考虑到新词。例如,您可以这样做:

if(r_or_s == '\n')
    r_or_s = getchar(); // we read the trailing newline character before, read again

此外,当用户输入“R”或“S”时,您希望停止循环,因此您需要更改:

while (r_or_s != 'R' || r_or_s != 'S');
为此:

while (r_or_s != 'R' && r_or_s != 'S');

这是什么?那应该是C吗?它在第一行无效..,,另一个重复:可能是重复的啊,我明白了。谢谢你教我这个^ ^ ^ C很难学,不是吗?@REN不客气。。图像是千言万语,因此答案如下:。这是完成的应用程序。如果您有时间,请查看代码并使用应用程序^ _^@REN,页面将无法显示。也许是我的工作网络堵塞了,现在是午餐时间。。老实说,我现在很忙,不过谢谢!谢谢你的帮助,我完成了这个项目。干杯^__^