【问题标题】:How to keep reading using cin until a blank line is reached如何使用 cin 继续阅读直到到达空行
【发布时间】:2017-05-22 14:44:06
【问题描述】:

我正在尝试使用标准输入(cin)来读取输入,直到 空白行 被击中。我尝试了很多次,但仍然无法实现。谁能帮帮我?

以下是输入格式。注意:
1。 // 是 cmets
2。注释可以在输入的第二行之后随机分布。所以我还需要清除那些cmets。不知道怎么做。
3.第一行必须是单个字母。
4.第二行必须是整数。

A      
8      

很棒
惊人
精彩
太棒了
了不起
//这些是一些随机的cmets
出色
天才
堆栈溢出

以下是我现在拥有的。我正在尝试使用 getline 但程序只读取前两行(字母和数字)。然后程序结束。不知道出了什么问题:

void read() {    
  vector<string> my_vec;
  char my_letter;
  cin >> my_letter;

  int my_num
  cin >> my_num;

  string current_word;
  while (getline(cin, current_word)) {
    if (current_word.empty()) {
      break;
    }
    if (current_word[0] != '/' ) {
      my_vec.push_back(current_word);
    }
  }
}

【问题讨论】:

  • “不工作”是什么意思?努力解释你的问题。
  • 抱歉,我已经编辑了包含问题的帖子。

标签: c++ stl iostream cin


【解决方案1】:

提取cin &gt;&gt; my_num; 不会提取换行符(即空格,因此下一个getline 调用会提取一个空行。

解决此问题的替代方法:

  1. 始终使用基于行的字符串提取和从属字符串流。

  2. 使用std::cin &gt;&gt; my_num &gt;&gt; std::ws 吞噬空白。

  3. 使用std::cin.ignore(1, '\n') 吞噬一个换行符。

  4. 使用虚拟的std::getline(std::cin, current_word) 调用来吞噬一个换行符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-17
    • 2016-11-02
    • 1970-01-01
    • 1970-01-01
    • 2012-11-18
    • 1970-01-01
    相关资源
    最近更新 更多