【问题标题】:C++: Infinite loop with a simple menu selectionC++:带有简单菜单选择的无限循环
【发布时间】:2010-12-03 02:59:40
【问题描述】:

我正在编写的脚本超过一页,所以我将链接它(一个简单的文件):
http://pastebin.com/7BVHmQGp

对此我深表歉意。我的问题是我在我的代码中进入了一个无限循环,例如,在我选择 1 或 2 进行加密/解密后,它让我输入单词,当我下次输入密码的“移位”时,它运行一个无限循环菜单。

我已经尝试了这么多小时来调试这个,我认为这是 cin 的问题,例如当你输入一个无效的选择时,它只会抛出一个无限循环/

似乎是什么导致了无限循环?

【问题讨论】:

  • 可能需要用到char c; cin.get(c);您必须在之后将其转换为整数
  • 我还以为它也是 std::string 。如果每次都对我这样做,我很难接受它的使用。

标签: c++ stdin infinite-loop


【解决方案1】:

我认为你应该忽略换行符而不是空格

我尝试了以下方法,它适用于 VS2010

    cin.ignore(1, '\n');
    getline(cin, input);

【讨论】:

  • 不幸的是,我尝试在它们之前附加它,它再次无限循环。 :( 我什至在所有cin 之前都尝试过。这太令人困惑了!
  • 你能试试这个'{while ((cin.peek()=='\n')||(cin.peek()=='\r')) cin.get() ;}'
  • 我把它放在哪里,为什么它周围有括号,你的意思是cin而不是fin?谢谢。
  • 使用代码 'while ((cin.peek()=='\n')||(cin.peek()=='\r')) 代替 cin.ignore。获取();'
  • 不幸的是同样的事情,无限循环吐出两个 cout/cin 请求输入 text+shift + 菜单无限次,就像它以某种方式完全忽略每个 cin 请求无限,甚至虽然没有输入任何内容...在其他人的编译器上也是一样!
【解决方案2】:

试试cin.clear,我相信你一直在读你的初始输入字符。

    cin >> selection;
    cin.clear(); 

【讨论】:

  • 哇...这样做使它在菜单上循环 4 次然后等待我的选择.. 这做了一些事情,呵呵,我会尝试看看它做了什么,这太奇怪了为什么会这样正在发生..
  • @Chubsdad 是正确的,它确实清除了标志,但它似乎停止了你的循环
  • 我相信它的工作原理是您正在从 cin 读取一个字符并将其分配给一个整数,这会导致设置错误标志,为什么不将选择更改为 char 并测试 char而不是整数。
  • 谢谢,它与 Chubsdad 的解决方案一起工作 :) 我希望我能 +1。
【解决方案3】:

This page 应该解释所有你需要知道的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-06
    • 2019-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多