56 votes

Comment introduire des valeurs dans un vecteur

J'essaie de demander à l'utilisateur d'entrer des nombres qui seront poussés dans un vecteur, puis d'utiliser un appel de fonction pour compter ces nombres.

Pourquoi cela ne fonctionne-t-il pas ? Je ne peux compter que le premier nombre.

template <typename T>
void write_vector(const vector<T>& V)
{
   cout << "The numbers in the vector are: " << endl;
  for(int i=0; i < V.size(); i++)
    cout << V[i] << " ";
}

int main()
{
  int input;
  vector<int> V;
  cout << "Enter your numbers to be evaluated: " << endl;
  cin >> input;
  V.push_back(input);
  write_vector(V);
  return 0;
}

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.

5voto

Wojciech Migda Points 367

Une seule ligne pour lire un fixe de nombres dans un vecteur (C++11) :

#include <algorithm>
#include <iterator>
#include <iostream>
#include <vector>
#include <cstddef>

int main()
{
    const std::size_t LIMIT{5};
    std::vector<int> collection;

    std::generate_n(std::back_inserter(collection), LIMIT,
        []()
        {
            return *(std::istream_iterator<int>(std::cin));
        }
    );

    return 0;
}

5voto

Amit Sharma Points 129

Si vous connaissez la taille, utilisez ceci

Aucune variable temporaire n'est utilisée pour stocker les données de l'utilisateur

int main()
{
    cout << "Hello World!\n"; 
    int n;//input size
    cin >> n;
    vector<int>a(n);
    for (int i = 0; i < n; i++) {
        cin >> a[i];
    }

//to verify output user input printed below

    for (auto x : a) {
        cout << x << " ";
    }
    return 0;
}

4voto

01d55 Points 1754

Vous avez besoin d'un deuxième nombre entier.

int i,n;
vector<int> V;
cout << "Enter the amount of numbers you want to evaluate: ";
cin >> i;
cout << "Enter your numbers to be evaluated: " << endl;
while (V.size() < i && cin >> n){
  V.push_back(n);
}
write_vector(V);
return 0;

3voto

aoeu Points 9342

Il est probable que vous souhaitiez lire plusieurs chiffres, et non un seul. Pour cela, vous avez besoin d'une boucle

int main()
{
  int input = 0;
  while(input != -1){
    vector<int> V;
    cout << "Enter your numbers to be evaluated: " << endl;
    cin >> input;
    V.push_back(input);
    write_vector(V);
  }
  return 0;
}

Remarque : dans cette version, il n'est pas possible d'ajouter le chiffre -1 car il s'agit du "signal de fin". Tapez des nombres aussi longtemps que vous le souhaitez, l'opération sera interrompue lorsque vous taperez -1.

3voto

johnathon Points 1593

Cin est délimité par l'espace, donc si vous essayez de cin "1 2 3 4 5" dans un seul entier, vous allez seulement assigner 1 à l'entier, une meilleure option est d'envelopper votre input et push_back dans une boucle, et de tester pour une valeur sentinelle, et sur cette valeur sentinelle, appeler votre fonction write. comme par exemple

int input;
cout << "Enter your numbers to be evaluated, and 10000 to quit: " << endl;
while(input != 10000) {
    cin >> input;
   V.push_back(input);
}
write_vector(V);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X