std :: cin有时会挂起,有时在无效输入后会永远重复

迈克尔·多斯特(Michael Dorst)

在这种情况下,当标记的行hang point接收到无效输入时,例如。abc,它会重复内部do-while循环,并在再次到达该行时挂起。

// figure 1
std::string s;
do {
    do {
        std::cout<<"s = ";
        std::getline(std::cin, s);
    } while (s == "");
    double d;
    std::cout<<"d = ";
    do {
        std::cin.clear();
        std::cin>>d; // hang point
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    } while (std::cin.fail());
} while (s != "exit");

在这种情况下,程序将跳过该行,并永远重复执行do-while循环。

// figure 2
double d;
do {
    std::cout<<"d = ";
    std::cin.clear();
    std::cin>>d; // skip point
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
} while (std::cin.fail());

为什么?

最初,我要问为什么figure 1挂起,并且在尝试简化示例的过程中,我figure 2想到,发现它没有挂起,但是一直重复着。我不明白为什么要这么做figure 1figure 2做他们所做的事情。

编辑:cin在我为自己写的提示符下输入字母数据,导致我失败了。例如。

s = something
d = 3
s = something
d = a
一个人的叹息

图2:您必须在cin.ignore()之前调用cin.clear()。否则,cin.ignore不会执行任何操作,因为cin仍处于错误状态。

double d;
do {
    if (std::cin.fail()) {
        std::cin.clear();
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    }
    std::cout<<"d = ";
    std::cin>>d;
} while (std::cin.fail());

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从vibe.d同步执行std.process有时会无声地挂起服务器

来自分类Dev

当写入二进制文件时,`std :: ofstream :: write`有时会写入比应有的字节更多的字节。

来自分类Dev

为什么有时在编辑文件后有时会创建重复文件?

来自分类Dev

Windows 10键盘有时会重复按键,有时会忽略按键

来自分类Dev

ssh-copy-id有时会挂起

来自分类Dev

Python socket.connect有时会挂起

来自分类Dev

JBoss 5.1-TopicConnection.createTopicSession有时会挂起

来自分类Dev

部分和OpenMP代码有时会挂起

来自分类Dev

重新启动有时会挂起

来自分类Dev

URL连接关闭有时会挂起

来自分类Dev

有时会恢复,有时会结帐

来自分类Dev

为什么分配Int8Array时Node有时会挂起?

来自分类Dev

为什么我的 Ubuntu 20.04 安装有时会在启动时挂起?

来自分类Dev

执行applescript 时,Finder 应用程序有时会挂起/冻结

来自分类Dev

有时可以在C ++中使用std :: atomic代替std :: mutex吗?

来自分类Dev

MomentJS有时会返回无效的日期

来自分类Dev

MomentJS有时会返回无效的日期

来自分类Dev

为什么有时模板参数解压缩有时不适用于std :: function?

来自分类Dev

django有时会重复数据

来自分类Dev

递增字段集 ID 有时会导致重复

来自分类Dev

扫描仪的nextLine()有时会跳过输入

来自分类Dev

当应用恢复时,Android EditText有时会丢失输入

来自分类Dev

滚动时Android Studio有时会滞后

来自分类Dev

KDE 有时会在唤醒时出现故障

来自分类Dev

引导时,有时会显示“ No bootable device ...”,有时它可以工作

来自分类Dev

在* ngFor中使用管道,页面有时会更新,有时不会

来自分类Dev

Redis blpop有时会返回元组,有时不是吗?

来自分类Dev

为什么`.asInstanceOf`有时会抛出,有时却不会抛出?

来自分类Dev

为什么AS有时会接受大位移而有时却不接受?

Related 相关文章

  1. 1

    从vibe.d同步执行std.process有时会无声地挂起服务器

  2. 2

    当写入二进制文件时,`std :: ofstream :: write`有时会写入比应有的字节更多的字节。

  3. 3

    为什么有时在编辑文件后有时会创建重复文件?

  4. 4

    Windows 10键盘有时会重复按键,有时会忽略按键

  5. 5

    ssh-copy-id有时会挂起

  6. 6

    Python socket.connect有时会挂起

  7. 7

    JBoss 5.1-TopicConnection.createTopicSession有时会挂起

  8. 8

    部分和OpenMP代码有时会挂起

  9. 9

    重新启动有时会挂起

  10. 10

    URL连接关闭有时会挂起

  11. 11

    有时会恢复,有时会结帐

  12. 12

    为什么分配Int8Array时Node有时会挂起?

  13. 13

    为什么我的 Ubuntu 20.04 安装有时会在启动时挂起?

  14. 14

    执行applescript 时,Finder 应用程序有时会挂起/冻结

  15. 15

    有时可以在C ++中使用std :: atomic代替std :: mutex吗?

  16. 16

    MomentJS有时会返回无效的日期

  17. 17

    MomentJS有时会返回无效的日期

  18. 18

    为什么有时模板参数解压缩有时不适用于std :: function?

  19. 19

    django有时会重复数据

  20. 20

    递增字段集 ID 有时会导致重复

  21. 21

    扫描仪的nextLine()有时会跳过输入

  22. 22

    当应用恢复时,Android EditText有时会丢失输入

  23. 23

    滚动时Android Studio有时会滞后

  24. 24

    KDE 有时会在唤醒时出现故障

  25. 25

    引导时,有时会显示“ No bootable device ...”,有时它可以工作

  26. 26

    在* ngFor中使用管道,页面有时会更新,有时不会

  27. 27

    Redis blpop有时会返回元组,有时不是吗?

  28. 28

    为什么`.asInstanceOf`有时会抛出,有时却不会抛出?

  29. 29

    为什么AS有时会接受大位移而有时却不接受?

热门标签

归档