-2

我无法弄清楚为什么以下程序中的循环没有完全运行 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;
}
4

1 回答 1

0

谢谢。我知道了。问题出在getline(). 当我在键入值后按下时,第一个循环周期被浪费了,因为getline()第一行只包含换行符。enter keytestCount

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

此外,getline如果它们不适合该行,则将空格留在它们所在的位置。cin >> 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; 
}
于 2015-07-04T11:54:11.640 回答