【问题标题】:not exiting while loop with cin as condition c++没有以cin作为条件c ++退出while循环
【发布时间】:2014-09-08 07:12:51
【问题描述】:

我知道这是一个常见问题,但如果不使用向量和 ctrl + d/c,我找不到任何解决方案。我在使用 cin 获取未知数量的整数时遇到了无限循环。即使在按下输入后,while 循环也不会停止执行。非常感谢!

while(cin >> num)
{
    num--;
    sizeB = 0;
    setB[sizeB] = num;
    sizeB++;
}
cin.ignore();
cin.clear();

【问题讨论】:

  • 空格在格式化输入操作中被忽略。换行符是空格。也许您想改用getline
  • 如果num 是一个整数而不是输入字母并按Enter 将导致循环退出
  • @MarcoA 条件是cin。 (operator>> 返回对cin 的引用)。相当于做!cin.fail(),即检查没有出现文件结尾,也没有输入的内容未能转换为num的类型。
  • @Zeta 很抱歉,我无法使用 getline,就像我使用 get line 一样,它会将所有值作为一个句子读取。
  • @MattMcNabb 我不习惯这个用例,这绝对是真的 (cplusplus.com/reference/ios/ios/operator_bool)。准确地说'does not return the same as member good, but the opposite of member fail'

标签: c++ while-loop cin infinite


【解决方案1】:

while 接受一个布尔参数。在您的代码中,cin >> num 返回一个istream&,即转换为调用istream::operator bool()(如果流未关闭,我猜它的计算结果为true

读取一个字符串并将其转换为int,当字符串为空时中断:

while (1) {
   std::string theString;
   std::getline(std::cin, theString);
   if (theString.empty())
      break;
   int num= atoi(theString.c_str());
   ...
}

【讨论】:

  • 虽然这是真的,但它还没有回答(隐含的)问题。
【解决方案2】:

可以使用getline函数逐行获取数据,然后通过stringstream读取值:

#include <iostream>
#include <stdio.h>
#include <sstream>

using namespace std;

int main() {
  string line;
  while(getline(cin, line)) {
    stringstream str_stream(line);
    int num;
    while(str_stream >> num) {
      cout << "..." << num << "..." << endl;
    }
    cout << "----" << endl;
  }
}

【讨论】:

  • 非常感谢!因为之前没学过stringstream所以有点迷茫,现在明白了。
猜你喜欢
  • 2021-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-08
  • 2013-08-04
  • 1970-01-01
  • 2023-01-12
  • 2022-01-22
相关资源
最近更新 更多