【问题标题】:C++ - Taking variable number of integers from standard input, n number of timesC ++ - 从标准输入中获取可变数量的整数,n次
【发布时间】:2023-03-18 19:00:01
【问题描述】:

我无法弄清楚为什么以下程序中的循环没有准确地运行 testCount 次。请帮忙改正。

#include <iostream>
#include <string>
#include <sstream>

using namespace std;
  int main() {
  size_t testCount;
  cin >> testCount;
  if(testCount < 0 || testCount > 100) return 0;
  int input;
  while(testCount--) {
    string instr;
    getline(cin,instr);
    istringstream iss(instr);
    while(iss >> input) {
      cout << input << endl;
    }
  }
  return 0;
}

【问题讨论】:

  • 将其更改为cin &gt;&gt; testCount &gt;&gt; ws;Demo
  • 您应该首先自己跟踪错误。这个简单的代码大部分都可以通过这种方式轻松解决。

标签: c++ cin getline istringstream


【解决方案1】:

谢谢。我得到了它。问题在于getline()。当我在输入testCount 值后按下enter key 时,getline() 正在占用仅包含换行符的第一行,因此第一个循环周期被浪费了。

std::ws 是一个输入流操纵器,它会忽略所有空格,直到遇到第一个非空格字符。

此外,getline 将空格留在它们所在的位置,如果它们不适合该行。 cin &gt;&gt; ws 将丢弃这些。

这是防弹代码:

#include <iostream>
#include <string>
#include <sstream>

using namespace std;
int main() {
  size_t testCount;
  cin >> testCount >> ws;
  if(testCount < 0 || testCount > 100) return 0;
  int input;
  while(testCount--) {
    cout << "testCount " << testCount << endl;
    string instr;
    cin >> ws;
    getline(cin,instr);
    istringstream iss(instr);
    while(iss >> input) {
      cout << input << endl;
    }
  }
  return 0; 
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-24
    • 2019-07-26
    • 1970-01-01
    • 1970-01-01
    • 2012-01-25
    • 2011-04-14
    • 1970-01-01
    相关资源
    最近更新 更多