gpt4 book ai didi

C:Do-While 循环重复太多!

转载 作者:太空宇宙 更新时间:2023-11-04 06:08:27 25 4
gpt4 key购买 nike

我有一个小程序让我很困惑。我正在尝试使用循环来获取用户的输入。如果输入错误,则再次重复,但如果输入正确,则退出。代码片段是:



void main()
{
字符用户状态;//检查用户状态 q = Quiz Master 和 p = Participant
int valid_status = '0';//检查用户状态是否有效。在某些循环中使用。 0 = 无效,1 = 无效。
printf("欢迎使用常识测验管理系统。\n此应用程序旨在帮助您进行测验或测试您的 GK。");

{
user_status = '0';
printf("\n\n请输入您的角色。\n测验大师 =\'q\'\n参与者 =\'p\'\n");
scanf("%c", &user_status);
如果 (user_status == 'q'|| user_status == 'Q')
{
printf("正在初始化测验主片段\n\n____________________________________\n");
发起_qm();
valid_status = '1';
}
else if (user_status == 'p' || user_status == 'P')
{
printf("初始化参与者段");
发起_pa();
valid_status = '1';
}
}
while (valid_status != '1')
printf("\n程序将立即退出。按任意键返回 Windows。");
获取();
}

我期待这样的输出:

Please Enter Your Role 
Quiz Master = 'q'
Participant = 'p'

到现在为止,效果很好。当我输入 q/Q/p/P 时,效果很好。但是当我输入错误时,它不会提供所需的输出。

例如,如果我输入“abc”,我应该再次得到上面的文本,要求我输入 q 或 p。但是相反,我得到了这个:

 Please Enter Your Role 
Quiz Master = 'q'
Participant = 'p'
Please Enter Your Role
Quiz Master = 'q'
Participant = 'p'
Please Enter Your Role
Quiz Master = 'q'
Participant = 'p'
Please Enter Your Role
Quiz Master = 'q'
Participant = 'p'
_ (I have to input here)

现在,为什么要重复 3 次。需要注意的一件有趣的事情是,如果我输入 2 个字符长的内容,它会额外重复 2 次,如果我将其留空(只需按回车键),它就不会重复额外的次数。

我必须只使用 C。我正在使用 Visual C++ 2010 进行编译。

谢谢。

最佳答案

因为你给了scanf三个字符来处理。它在第一次调用 scanf 获取“a”时删除第一个第一个字符,但标准输入缓冲区中仍有“bc”。

在再次查找输入之前,您需要检查缓冲区中的剩余内容。而且我会避免刷新标准输入缓冲区,因为它是未定义的行为。 (http://www.gidnetwork.com/b-57.html)

您可以阅读剩余的字符并丢弃它们

do{  
scanf("%c", &user_status);
}while(user_status!='\n'); //This discards all characters until you get to a newline

在你读完你想要的字符之后。

关于C:Do-While 循环重复太多!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5216330/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com