Добавление int в вектор - PullRequest
2 голосов
/ 21 мая 2019

Я только начал изучать c ++, и у меня есть эта маленькая проблема.Я пытаюсь поместить столько целых чисел, сколько я ввожу в вектор, и останавливаюсь, когда я больше не вводю целое число.

Для этого я использую

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

Это то, что я изучаю в своем учебнике, проблема в том, что всякий раз, когда я помещаю любой символ, не являющийся 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 Ответ

3 голосов
/ 21 мая 2019

Когда 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;, где вы пытаетесь прочитать другое целое число.

...