首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >do...while循环有问题

问do...while循环有问题
EN

Stack Overflow用户
提问于 2019-02-03 14:29:40
回答 1查看 79关注 0票数 2

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

如果用户输入的不是字母'R‘或'S',那么do while循环将把代码返回到用户输入字母的位置。

但是,例如,当我尝试输入'Z‘时,循环会重复自己两次,要求在第二个循环上输入。

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

我试过..。用时间循环吗?那不管用。我不想用后藤。

代码语言:javascript
复制
<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):

在拒绝输入之后,但实际输出是:

您想颠倒数字还是洗牌?(按R/S键):您是要倒号还是洗牌?(按R/S):

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-03 14:32:07

这是因为您输入'Z‘例如,然后您也按下了回车!

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

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

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

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

代码语言:javascript
复制
if(r_or_s == '\n')
    r_or_s = getchar(); // we read the trailing newline character before, read again

此外,当用户输入'R‘或'S’时,您希望停止循环,因此需要更改以下内容:

代码语言:javascript
复制
while (r_or_s != 'R' || r_or_s != 'S');

对此:

代码语言:javascript
复制
while (r_or_s != 'R' && r_or_s != 'S');
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54503849

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档