D'autres réponses vous amèneraient à interdire un nombre particulier ou à demander à l'utilisateur d'entrer quelque chose de non numérique pour mettre fin à la saisie. Une meilleure solution consiste peut-être à utiliser std::getline()
pour lire un ligne d'entrée, puis utiliser std::istringstream
pour lire tous les nombres de cette ligne dans le vecteur.
#include <iostream>
#include <sstream>
#include <vector>
int main(int argc, char** argv) {
std::string line;
int number;
std::vector<int> numbers;
std::cout << "Enter numbers separated by spaces: ";
std::getline(std::cin, line);
std::istringstream stream(line);
while (stream >> number)
numbers.push_back(number);
write_vector(numbers);
}
En outre, votre write_vector()
peut être remplacée par un appel plus idiomatique à la fonction std::copy()
pour copier les éléments dans un std::ostream_iterator
à std::cout
:
#include <algorithm>
#include <iterator>
template<class T>
void write_vector(const std::vector<T>& vector) {
std::cout << "Numbers you entered: ";
std::copy(vector.begin(), vector.end(),
std::ostream_iterator<T>(std::cout, " "));
std::cout << '\n';
}
Vous pouvez également utiliser std::copy()
et quelques itérateurs pratiques pour obtenir les valeurs dans le vecteur sans boucle explicite :
std::copy(std::istream_iterator<int>(stream),
std::istream_iterator<int>(),
std::back_inserter(numbers));
Mais c'est probablement exagéré.
0 votes
D'après mon expérience, cin ne capture que le premier token d'une chaîne, donc tout ce qui se trouve après un espace est coupé. Si vous voulez vraiment utiliser cin, lisez chaque variable séparément, ou demandez à l'utilisateur de séparer les valeurs par une virgule et de les analyser. Ou vous pouvez utiliser le tableau argv dans la méthode principale.
3 votes
Avez-vous essayé d'utiliser une variable supplémentaire ? Au lieu d'utiliser n pour la taille et l'entrée temporaire.
3 votes
Vous devriez expliquer ce qui ne fonctionne pas ici.
0 votes
@R.MartinhoFernandes BenjaminLindley Je suis d'accord avec vous, mais je pensais que l'OP avait déjà passé du temps et qu'il pouvait obtenir la réponse. Bien sûr, votre approche est bien meilleure.