首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >扫描正在被跳过:如何使它接受用户的输入?

扫描正在被跳过:如何使它接受用户的输入?
EN

Stack Overflow用户
提问于 2014-10-28 22:14:07
回答 1查看 45关注 0票数 1

最近我不得不创建一个程序来重现Monty的问题。我必须让用户在1到3之间选择一扇门,然后随机选择哪扇门背后有奖品。一旦完成,我会向用户展示一扇没有奖励的门,这时他可以选择保留他原来的门,或者改变它。这就是我的问题所在。下面的代码组(我之前已经初始化了所有变量)是当我要求用户保留原门或更改它时。由于一些未知的原因,程序不会等待用户输入他的选择;相反,它会跳过scanf("%c“&)。我不知道这是怎么回事,会不会有人能澄清这种迷思呢?谢谢您:)

代码语言:javascript
复制
int portes[] = {0,0,0};
        srand(time(0));
        winning_door= rand()%3;
        doors[winning_door] = 1;
        printf("\nChoose a door:\n");
        scanf("%d", &chosen_door);

        for(i = 0; i<3; i++)
        {
            if(doors[i] == 0 && i != (chosen_door-1))
            {
                printf("The door number %d is empty!\n", i+1);
                printf("\nWould you like to change doors? Enter 'y' for yes and 'n' for no.\n");
                scanf("%c", &choice);
                break;
            }
        }

在这段代码中,scanf("%c“& skips );被完全忽略,程序跳过到下一部分!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-28 22:46:50

问题是,扫描的%c指令读取单个字符的,而不跳过空格。因此,在您的例子中,它将读取在第一个Choose a door问答之后仍然挂在输入上的换行符。您可以使用%1s读取单个非空白字符(忽略所有空格),该字符将跳过左转换行符和用户可能输入的任何空格,返回他们输入的第一个“真实”字符。但是,如果需要这样做,则需要将选择声明为两个字符的数组(char choice[2]),因为扫描将在读取单个字符后写入空字节。

或者,您可以在%c (所以是scanf(" %c", &choice))之前向格式添加一个空格,它显式地跳过所有空白字符。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26619436

复制
相关文章

相似问题

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