将int添加到向量中

时间:2019-05-21 09:28:44

标签: c++ vector while-loop cin

我刚刚开始学习c ++,但是我有这个小问题。我尝试将尽可能多的整数输入到向量中,并在不再输入整数时停止输入。

为此我使用

while(std::cin>>x) v.push_back(x);

这就是我在教科书中所学到的,问题是,即使我以后的代码中有另一个cin,只要我放一个不是int的字符,程序都会停止。

#include <iostream>
#include <vector>
#include <algorithm>
#include <math.h>

int main(){
  try{
    int x,n;
    int sum=0;
    std::vector<int> v;

    std::cout << "Introduce your numbers" << '\n';
    while(std::cin>>x) v.push_back(x);

    std::cout << "How many of them you want to add?" << '\n';
    std::cin >> n;

    if(n>v.size()) throw std::runtime_error("Not enough numbers in 
the vector");

    for(int i=0; i<n;i++){
       sum+=v[i];
    }

    std::cout<<sum;
    return 0;
    }

  catch(std::exception &exp){
    std::cout << "runtime_error" <<exp.what()<< '\n';
    return 1;
  }   
}

1 个答案:

答案 0 :(得分:3)

std::cin>>x由于遇到一个字符而失败时,该字符不会被删除。因此,当您稍后尝试获取另一个整数时,由于相同的原因它将失败。您可以通过使用std::cin.ignore刷新缓冲区并使用std::cin.clear重置错误标志来清除蒸汽。在此行之后:

while(std::cin>>x) v.push_back(x);

添加此内容:

std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n')

这样,流为空,并在您尝试读取另一个整数的std::cin >> n;行上再次准备就绪。