2016-02-11 5 views
1
vector<int> var; 
    int numb; 
    for(;;){ 
     cin>>numb; 
     var.push_back(numb); 
     if(numb!='\n'){ 
      break; 
     }} 
    insertionSort(var); 
    for(int i=0;i<var.size();i++){ 
     cout<<var[i]<<" "; 
    } 
} 

Lorsque j'entrais par ex. 1 2 3, il ne prend que la première valeur quand j'appuie sur enter. Des solutions?Cin entiers avec espace Problème

+0

si vous entrez plusieurs arguments - cin en prendre un par appel. vous pouvez utiliser std :: getline() et analyser ints si vous avez vraiment besoin de les saisir comme vous le faites – Starl1ght

+0

J'ai entré 3 entiers avec des espaces et il a seulement pris le premier nombre. Quel est le problème avec le code? – Testermoon01

+1

Vous cassez chaque fois que le nombre d'entrée n'est pas 10 (''\ n''). 1 n'est pas 10. – molbdnilo

Répondre

2

Vous pouvez utiliser itérateurs pour l'entrée standard de la manière suivante

#include <iostream> 
#include <vector> 
#include <iterator> 

int main() 
{ 
    std::vector<int> var(std::istream_iterator<int>(std::cin), 
          std::istream_iterator<int>()); 

    for (int x : var) std::cout << x << ' '; 
    std::cout << std::endl; 

    return 0; 
} 

Ou vous pouvez utiliser une boucle comme celui-ci

int numb; 

while (cin >> numb) var.push(numb); 

En ce qui concerne votre code, vous ne pouvez pas lire le nouveau caractère de ligne comme vous utilisez. Le nouveau caractère de ligne est un espace blanc qui est ignoré lorsque l'opérateur < < est utilisé.

+0

Le code que j'utilise peut-il être modifié de manière à pouvoir lire le nouveau caractère de ligne lorsque Im appuie sur Entrée? – Testermoon01

+1

@ Testermoon01 Le nouveau caractère de ligne n'est pas une représentation textuelle d'un nombre. Je pense que vous n'allez pas le stocker comme un nombre dans le vecteur. Vous pouvez utiliser la fonction standard std :: getline, puis utiliser std :: istringstream pour lire les entiers de la chaîne. –

+0

Oh, maintenant je comprends pourquoi il ne lit pas la touche d'entrée. Ajoutant à cela je ne peux vraiment pas utiliser getline ou istringstream ou même itérateurs – Testermoon01

0

Vous pouvez utiliser cin >> a >> b >> c; dans ce cas, mais pour simplifier, utiliser cin une seule fois ne fera que lire une variable. Si vous avez besoin de lire plus d'une variable alors une meilleure option serait de lire une chaîne et de les extraire de là.