J'essaie de lire les entiers de la console dans mon vecteur d'ints. Je veux continuer à lire des entiers à partir d'une seule ligne jusqu'à ce que l'utilisateur clique sur Entrée. J'ai essayé d'utiliser getline et stringstream, mais il continue à chercher des entrées après avoir appuyé sur enter. Des solutions?Comment lire les entiers de la console en vecteur avec cin
Une description de haut niveau: Ce programme lit des nombres à partir de la console et les pousse à l'arrière d'un vecteur. Le vecteur est ensuite trié et deux pointeurs sont créés pour pointer vers l'arrière et vers l'avant. L'utilisateur peut alors entrer une somme que le programme cherchera ensuite en temps linéaire en prenant la somme des deux pointeurs. Les pointeurs continueront alors à se déplacer dans une direction jusqu'à ce qu'ils trouvent une telle somme ou déterminent qu'une telle somme n'existe pas.
#include <iostream>
#include <vector>
#include <algorithm>
#include <sstream>
using namespace std;
int findSum(vector<int> tempVec, int sum)
{
int i;
cout << "Sorted sequence is:";
for (i = 0; i < tempVec.size(); i++)
cout << " " << tempVec[i];
cout << endl;
int *ptr1 = &tempVec[0];
cout << "ptr1 points to: " << *ptr1 << endl;
int *ptr2 = &tempVec[tempVec.size() - 1];
cout << "ptr2 points to: " << *ptr2 << endl;
int count = 0;
while (ptr1 != ptr2)
{
if ((*(ptr1) + *(ptr2)) == sum)
{
cout << *(ptr1) << " + " << *(ptr2) << " = " << sum;
cout << "!" << endl;
return count;
}
if ((*(ptr1) + *(ptr2)) < sum)
{
cout << *(ptr1) << " + " << *(ptr2) << " != " << sum;
ptr1 = ptr1 + 1;
cout << ". ptr1 moved to: " << *ptr1 << endl;
count++;
}
else
{
cout << *(ptr1) << " + " << *(ptr2) << " != " << sum;
ptr2 = ptr2 - 1;
cout << ". ptr2 moved to: " << *ptr2 << endl;
count++;
}
}
return -1;
}
int main()
{
int ValSum;
cout << "Choose a sum to search for: ";
cin >> ValSum;
vector<int> sumVector;
int input;
cout << "Choose a sequence to search from: ";
while (cin >> input != "\n")
{
//getline(cin, input);
if (cin == '\0')
break;
sumVector.push_back(input);
}
sort(sumVector.begin(), sumVector.end());
int count = findSum(sumVector,ValSum);
if (count == -1)
cout << "\nThe sum " << ValSum << " was NOT found!" << endl;
else
{
cout << "\nThe sum " << ValSum << " was found!" << endl;
cout << count + 1 << " comparisons were made." << endl;
}
sumVector.clear();
}
Offrir l'option de la réponse suivante 2 un jars. La seule différence est que vous utilisez cin plutôt qu'un fichier: https://stackoverflow.com/a/7868998/4581301 – user4581301
Où est 'getline' et' stringstream' dans votre code? – Barmar
'getline' et' stringstream' est la bonne façon de résoudre ce problème, donc vous devez avoir mal agi. 'getline' ne devrait pas être dans la boucle - vous le faites une fois, puis lisez depuis le' stringstream' dans la boucle. – Barmar