【问题标题】:C++: in while(cin) loop, sometimes the loop is ignoredC++:在 while(cin) 循环中,有时会忽略循环
【发布时间】:2017-04-22 04:01:06
【问题描述】:

在我的代码中,我尝试创建一个循环,但每隔一段时间,整个循环在获得我的输入后都会被忽略。

这是循环:

while(std::cin >> word){
        std::cin.clear();

        qType = (rand()%2) + 1;
        letter = (rand()%26) + 1;
        if(qType == 1){
            std::cout << letter << std::endl;
        }else if(qType == 2){
            std::cout << Letters[letter] << std::endl;
        }
}

当我写我的输入时,循环的前几次成功输出了一个字母或其对应的数字,但不久之后,它就停止了。我发现有类似问题的人,但对他们来说,解决方案是添加一个 cin.clear();函数,我先添加到末尾,然后添加到开头,但它并没有解决问题。

【问题讨论】:

  • word的类型是什么?
  • Letters 是什么?你不需要一个数组来获取字母。只需使用'a' + letter'A' + letter
  • @LưuVĩnhPhúc -- 该代码不可移植。字符代码不需要是连续的,并且有些编码不是连续的(EBCDIC 是主要示例)。这种方法适用于数字09,因为它们需要连续且递增。对于字母,通过数组进行转换是正确的做法。

标签: c++


【解决方案1】:

首先,你没有给出终止条件,所以也许这段代码对你有用……

while(word!="exit"){
    cin >> word;

    qType = (rand()%2) + 1;
    letter = (rand()%26) + 1;
    if(qType == 1){
        cout << letter << std::endl;
    }else if(qType == 2){
        cout << Letters[letter] << std::endl;
    }
            cin.clear();

}

【讨论】:

    【解决方案2】:

    首先,你的while循环应该是什么结尾?你设置循环的方式,它永远不会结束。此外,您没有在循环内无处使用 word 变量,那么它的意义何在。如果你想循环直到用户输入一些退出代码,它应该是这样的:

    std::string word;
    while (word != "exit") {
        std::cin >> word;
        // your code
    }
    

    【讨论】:

      【解决方案3】:

      试试这个

      while(std::cin >> word && word != '\n'){
          std::cin.clear();
      
          qType = (rand()%2) + 1;
          letter = (rand()%26) + 1;
          if(qType == 1){
              std::cout << letter << std::endl;
          }else if(qType == 2){
              std::cout << Letters[letter] << std::endl;
          }
      

      }

      【讨论】:

        猜你喜欢
        • 2016-12-24
        • 2013-08-04
        • 2013-02-01
        • 2017-06-21
        • 2017-04-29
        • 2016-09-08
        • 2022-11-03
        • 2013-02-08
        相关资源
        最近更新 更多