8
votes

Comment lire des nombres séparés de l'espace de la console?

J'essaie de faire une tâche simple de lecture de nombres séparés de l'espace de la console dans un vecteur , mais je ne comprends pas comment faire cela correctement.

C'est ce que j'ai fait jusqu'à présent: xxx

Cependant, cela nécessite que l'utilisateur appuie un caractère non valide (tel que A ) briser le pendant que boucle. Je ne le veux pas.

Dès que l'utilisateur entre des numéros, comme 0 2 3 4 5 et appuyez sur Entrée Je veux que la boucle soit cassée. J'ai essayé d'utiliser iStream_iterator et cin.getline aussi, mais je ne pouvais pas le faire fonctionner.

Je ne sais pas combien d'éléments utilisateur entreront, d'où j'utilise vecteur .

S'il vous plaît suggérer la bonne façon de faire cela.


0 commentaires

5 Réponses :


12
votes

Utilisez un getline code> combiné avec un istringstream code> pour extraire les chiffres.

std::string input;
getline(cin, input);
std::istringstream iss(input);
int temp;
while(iss >> temp)
{
   yourvector.push_back(temp);
}


3 commentaires

Mais cette méthode nécessite de flancser que je ne sais pas. Pouvez-vous poster un exemple de code?


Oups..ok, je l'ai eu maintenant avec @templatetypedef exemple. Vous vous référez à la fonction gratuite geline et non cin.getline .


#include sinon vous obtiendrez une erreur "Istringstream ISS a initialisateur mais type incomplet"



8
votes

Élaborer sur la réponse de Jonsque, voici une possibilité, supposant que l'utilisateur entre fidèlement des entiers valides: xxx

Ceci va lire et analysera une ligne de nombres entiers valide à partir de CIN . Notez que ceci utilise la fonction fonction getline , qui fonctionne avec std :: string s, et pas istream :: getline < / code>, qui fonctionne avec des chaînes de style c.


0 commentaires

2
votes

Ce code devrait vous aider à sortir, il lit une ligne à une chaîne, puis itière sur le dessus, de sortir tous les chiffres.

#include <iostream>
#include <sstream>
#include <string>

int main() {
    std::string line;
    std::getline(std::cin, line);
    std::istringstream in(line, std::istringstream::in);
    int n;
    vector<int> v;
    while (in >> n) {
        v.push_back(n);
    }
    return 0;
}


0 commentaires

1
votes

Utilisateur rapide après chaque numéro ou prendre le nombre de numéros à l'avance et en boucle en conséquence. Pas une bonne idée mais j'ai vu cela dans de nombreuses applications.


0 commentaires

2
votes

En outre, peut être utile de savoir que vous pouvez stimuler une EOF - Appuyez sur 'Ctrl-Z' (Windows uniquement, des systèmes de type Unix utilisent Ctrl-D) dans la ligne de commande, après avoir terminé vos entrées. Devrait vous aider lorsque vous testez de petits programmes comme celui-ci - sans avoir à taper dans un caractère invalide.


1 commentaires

Ce serait Ctrl-D sur des systèmes de type UNIX.