do-while 无限循环 cout,忽略 cin

2023-12-13

该程序打印指定范围内指定数量的数字。但是,当我输入一个字符时,它只会无限循环我在其中执行的 do-while 循环。例如:如果我在“输入最大数字”cin 中输入一个字符,它只会无休止地发送垃圾邮件“输入最大数字”,它只是跳过cin 并循环 cout (其他 2 个 do-while 也是如此。有人知道为什么吗?

#include <iostream>
#include <cmath>
#include <cstdlib>
#include <ctime>

using namespace std;

int roll(int mini, int maxi)
{
        int v = maxi - mini;
        int x  = mini + (rand() % (v+1));
        return x;

}
void caller()
{
    int a;
    int b;
    int c;

    do {
    cout << "Enter minimum number" << endl;
    cin.clear();
    cin >> a;
    } while (cin.fail());

    do {
    cout << "Enter maximum number" << endl;
    cin.clear();
    cin >> b;
    } while (cin.fail() || a > b);

    do {
    cout << "How many rolls?" << endl;
    cin.clear();
    cin >> c;
    } while (cin.fail());

    for (int i = 0; i < c; i++)
    cout << roll(a, b) << endl;
}

int main()
{
    srand (time(NULL));
    caller();
    return 0;
}

我宁愿不使用istream::fail()用于循环控制。看为什么循环条件内的 iostream::eof 被认为是错误的?对于类似的问题。

相反,我依赖于返回值istream::operator >>.

我还使用以下函数来重置标志并清除输入流上的输入:

void flush_stream(std::istream& stream)
{
    stream.clear();
    stream.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}

See 如何刷新 cin 缓冲区?了解更多相关信息。

所以我会对你的输入检查进行编码:

int get_valid_number(const std::string& prompt)
{
    int number = 0;

    bool valid = false;
    while (!valid)
    {
        std::cout << prompt << std::endl;
        if (std::cin >> number)
        {
            valid = true;
        }
        flush_stream(std::cin);
    }

    return number;
}

希望将其提取到函数中的好处是显而易见的。看到它运行.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

do-while 无限循环 cout,忽略 cin 的相关文章

  • 获取数组变量的地址是什么意思?

    今天我读到了一段让我很困惑的 C 代码片段 include
  • 分段错误(核心转储)错误

    我的程序编译罚款 但在输入文件时出现 分段错误 核心转储 错误 我没有正确处理 ostream 吗 include
  • C++中delete和delete[]的区别[重复]

    这个问题在这里已经有答案了 可能的重复 C 中的删除与删除 运算符 https stackoverflow com questions 2425728 delete vs delete operators in c 我写了一个包含两个指针的
  • 在 C# Winforms 应用程序中嵌入 Windows XP 主题

    我有一个旧版 C Windows 窗体应用程序 其布局是根据 Windows XP 默认主题设计的 由于需要将其作为 Citrix 应用程序进行分发 该应用程序现在看起来像经典主题应用程序 因为 Citrix 不鼓励使用主题系统服务 所以
  • 如何创建用于 QML 的通用对象模型?

    我想知道是否有任何宏或方法如何将 Qt 模型注册为 QObject 的属性 例如 我有AnimalModel http doc qt io qt 5 qtquick modelviewsdata cppmodels html qabstra
  • 带 If 的嵌套 For 循环的时间复杂度

    void f int n for int i 1 i lt n i if i int sqrt n 0 for int k 0 k lt pow i 3 k do something 我的思考过程 执行if语句的次数 sum i 1 to
  • 为什么 clang 使用 -O0 生成低效的 asm(对于这个简单的浮点和)?

    我正在 llvm clang Apple LLVM 版本 8 0 0 clang 800 0 42 1 上反汇编此代码 int main float a 0 151234 float b 0 2 float c a b printf f c
  • C++ 插件的“最适合”动态类型匹配

    我有一个几乎所有东西都是插件的架构 该架构以图形用户界面为基础 其中每个插件都由一个 表面 即用户可以通过其与插件交互的 UI 控件 表示 这些表面也是插件 每当添加新插件时 瘦主机都会自动确定哪个可用表面与其最匹配的 UI 如何在 C 中
  • OpenCV 2.4.3 中的阴影去除

    我正在使用 OpenCV 2 4 3 最新版本 使用内置的视频流检测前景GMG http docs opencv org modules gpu doc video html highlight gmg gpu 3a 3aGMG GPU算法
  • 使用 WF 的多线程应用程序的错误处理模式?

    我正在写一个又长又详细的问题 但只是放弃了它 转而选择一个更简单的问题 但我在这里找不到答案 应用程序简要说明 我有一个 WPF 应用程序 它生成多个线程 每个线程执行自己的 WF 处理线程和 WF 中的错误 允许用户从 GUI 端进行交互
  • C++ 错误 - “成员初始值设定项表达式列表被视为复合表达式”

    我收到一个我不熟悉的 C 编译器错误 可能是一个非常愚蠢的错误 但我不能完全指出它 Error test cpp 27 error member initializer expression list treated as compound
  • 如何随着分辨率的变化自动调整大小和调整表单控件

    我注意到某些应用程序会更改控件的位置以尽可能适应当前的分辨率 例如 如果窗口最大化 则控件的设置方式应使整个 GUI 看起来平衡 是否可以使用 C 在 Visual studio 2010 中制作或实现此功能 Use Dock http m
  • tabcontrol selectedindex 更改事件未被触发 C#

    嘿伙计们 我有一个很小的问题 请参阅下面的代码 this is main load private void Form1 Load object sender EventArgs e tabAddRemoveOperator Selecte
  • 从 R 到 C 处理列表并访问它

    我想使用从 R 获得的 C 列表 我意识到这个问题与此非常相似 使用 call 在 R 和 C 之间传递数据帧 https stackoverflow com questions 6658168 passing a data frame f
  • DataTable:通过 LINQ 或 LAMBDA 进行动态 Group By 表达式

    我有一个数据表 我想在其中对未指定数量的字段进行分组 发生这种情况的原因是用户可以选择他想要分组的字段 所以 实际上 我将选择推入列表中 在这个选择上 我必须对我的数据表进行分组 想象一下这段代码 VB 或 C 都一样 public voi
  • ASP.NET JQuery AJAX POST 返回数据,但在 401 响应内

    我的应用程序中有一个网页 需要调用我设置的 Web 服务来返回对象列表 这个调用是这样设置的 document ready function var response ajax type POST contentType applicati
  • 初始化 LPCTSTR /LPCWSTR [重复]

    这个问题在这里已经有答案了 我很难理解并使其正常工作 基本上归结为我无法成功初始化这种类型的变量 它需要有说的内容7 2E25DC9D 0 USB003 有人可以解释 展示这种类型的正确初始化和类似的值吗 我已查看此站点上的所有帮助 将项目
  • 使用 HTMLAgilityPack 从节点的子节点中选择所有

    我有以下代码用于获取 html 页面 将网址设置为绝对 然后将链接设置为 rel nofollow 并在新窗口 选项卡中打开 我的问题是关于将属性添加到 a s string url http www mysite com string s
  • C语言声明数组没有初始大小

    编写一个程序来操纵温度详细信息 如下所示 输入要计算的天数 主功能 输入摄氏度温度 输入功能 将温度从摄氏度转换为华氏度 独立功能 查找华氏度的平均温度 我怎样才能在没有数组初始大小的情况下制作这个程序 include
  • C#中为线程指定特殊的cpu

    我有 2 个线程 我想告诉其中一个在第一个 cpu 上运行 第二个在第二个 cpu 上运行 例如在具有两个 cpu 的机器中 我怎样才能做到这一点 这是我的代码 UCI UCIMain new UCI Thread UCIThread ne

随机推荐

  • 释放方法返回的对象

    好吧 我知道这个问题的答案应该是显而易见的 但我需要朝着正确的方向一点推动 我发现自己编写了很多遵循以下模式的方法 NSThing myMethod NSThing thing NSthing alloc init do some stuf
  • 使用 /proc/meminfo 读取 Android 设备的 RAM 总量

    我正在考虑读取 Android 设备的物理 RAM 总量 据我了解 这些信息存储在 proc meminfo中 我怎样才能阅读它 尝试这个 public void getTotalMemory String str1 proc meminf
  • 如何循环返回主菜单?

    我想知道这是否是循环回到 python 主菜单的正确方法 选择选项并完成任务后 脚本需要返回主菜单而不是退出 usr bin python def mainmenu print 1 Scan print 2 Ping print 3 Exi
  • 是否可以在 POST Json 中附加文件?

    我有一堆 JSON 序列化对象 格式的数据 我通过以下方式将此数据发送到服务器POST带标题的方法 Content Type application json 是否可以将文件附加到正文请求并立即发送 或者 JSON 数据建议仅发送文本数据
  • AttachConsole 错误 5:访问被拒绝

    我正在 Visual Studio 2013 中使用 C 控制台应用程序 在 Windows 上工作 首先我使用分离控制台FreeConsole 有用 然后 调用AllocConsole as FreeConsole 然后 AttachCo
  • 在字符列上合并大型 data.tables 会导致段错误

    我正在使用 R 版本 3 3 3 尽管我已经在 3 4 0 上复制了这个问题 并且data tableCygwin 上的版本 1 10 4 Edit 下面的评论表明这可能是 Cygwin 特有的 我需要通过字母数字 ID 列合并两个数据表
  • 为什么 jhat 的 -baseline 选项不起作用?

    为什么每个对象似乎都被标记为新对象 而不仅仅是第二个快照中但不在我的基准快照中的对象 在网上查看 我看到一些建议 我需要使用 hprof 而不是 jmap 来进行内存转储 但 hprof 似乎以完全相同的格式生成转储 这是JDK 1 6 0
  • 设置 PHP ImageMagick tmp 目录

    我正在尝试设置 ImageMagick 用于转换文件的临时目录 目前 在转换大型 PDF 时 临时文件夹很快就会达到 2 或 3 TB 这对于服务器磁盘来说太大了 因此我计划使用 AWS EFS 来存储所有内容 我将 EFS 驱动器安装在
  • 绘制隐式方程[重复]

    这个问题在这里已经有答案了 我需要在Python3中画一些曲线 我很习惯matplotlib pyplot 但我以前从未画过这样的东西 我真的很感激一些提示 特别是如何以 整洁 的方式编码的提示 和帮助 有一个例子 让我们用一颗心 x 2
  • Wix:升级时 Windows 服务有时会被卸载

    我们使用 Wix 安装我们的软件 我们的设置还安装了 Windows 服务 为了允许用户更改 Windows 服务的登录信息 我们只想在首次安装时安装该服务 并仅在卸载时将其删除 对于升级 我们手动停止服务 以便可以升级文件 我们已经做到了
  • MIPS 上的多精度算法

    我只是想在本机 MIPS 上实现多精度算术 假使 假设 一个 64 位整数位于寄存器 12 和 13 中 另一个 64 位整数位于寄存器 14 和 15 中 总和将被放置在寄存器 10 和 11 中 64 位整数的最高有效字位于偶数寄存器中
  • JSON.stringify 的逆向?

    我正在用 stringyfing 一个像这样的物体 foo bar 如何将字符串转回对象 你需要JSON parse 您的有效 JSON 字符串 var str hello world try var obj JSON parse str
  • 他们是如何在 http://artofflightmovie.com/ 中实现这些效果的?

    我一直试图了解他们是如何实现这些效果的http artofflightmovie com 到目前为止还没有成功 我什至不知道该通过谷歌搜索什么来寻求帮助 任何人都可以详细说明它 并可能放置指向插件 教程 其他网站做同样事情的链接吗 已经有一
  • 从 Python 中的命名空间对象导入变量

    假设我有一个命名空间args我通过调用获得的parser parse args 它解析命令行参数 如何将此命名空间中的所有变量导入到当前命名空间 e g parser add argument p some parameter defaul
  • 派生的 C++ 类如何通过基指针克隆自身?

    这就是我想要做的 此代码不起作用 class Base virtual Base clone return new Base this virtual void ID printf BASE class Derived publc Base
  • 用于打开 MSG 文件的 C# Outlook 互操作和 OpenSharedItem [已关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 为了使用 OpenSharedItem Outlook 互操作方法 我可以遵循任何教程或资源吗 我的目标是使用它读取 MSG 文件 因为它可以显然
  • Gradle 同步失败找不到约束布局:1.0.0-alpha2

    问题 Error Could not find com android support constraint constraint layout 1 0 0 alpha2 Required by myapp app unspecified
  • 将Mysql查询结果导出到Excel?

    我的要求是存储查询的整个结果 SELECT FROM document WHERE documentid IN SELECT FROM TaskResult WHERE taskResult 2429 到 Excel 文件 实现此目的的典型
  • 从精灵表中以 sfml 动画精灵

    我正在尝试在 sfml 中为精灵制作动画 目前 我可以移动精灵并在向不同方向移动时更改其图像 但我想在它移动时为其设置动画 我认为可能有一种方法可以使用 sf Clock 来完成此操作 或者可能有更好的方法 所有精灵都在同一个精灵表上 因此
  • do-while 无限循环 cout,忽略 cin

    该程序打印指定范围内指定数量的数字 但是 当我输入一个字符时 它只会无限循环我在其中执行的 do while 循环 例如 如果我在 输入最大数字 cin 中输入一个字符 它只会无休止地发送垃圾邮件 输入最大数字 它只是跳过cin 并循环 c