J'ai un programme qui invite un utilisateur à entrer une valeur. Chaque valeur que l'utilisateur entre est placée dans un vecteur 'autre' qui n'est là que pour la validation. Si une valeur en double a été saisie, l'utilisateur recevra une invite jusqu'à ce qu'il saisisse une valeur unique.Empêcher l'entrée en double dans le vecteur? C++
Le principal problème auquel je suis confronté est que, pour une raison quelconque, lors de l'exécution du code et l'impression des résultats du vecteur, il semble y avoir une entrée en double. Quelqu'un pourrait-il me dire pourquoi?
Voir ci-dessous pour mon code:
// prompt to continue
cout << "Would you like to continue? [Y]es, [N]o: ";
cin >> toContinue;
while (toContinue == 'Y')
{
bool isDuplicate = 0;
// prompt for product no.
cout << "Please enter product number: ";
cin >> productB;
// Validation check for duplicate entries
for (size_t i = 0; i < other.size(); i++)
{
if (productB == other[i])
isDuplicate = 1;
while (isDuplicate == 1)
{
cout << "You have already entered this product number!" << endl;
cout << "Please enter correct product number: ";
cin >> productB;
if (productB != other[i])
other.push_back(productB);
isDuplicate = 0;
}
}
// prompt to continue
cout << "Would you like to continue? [Y]es, [N]o: ";
cin >> toContinue;
}
Utilisez plutôt 'std :: set' à la place. – user0042
Vous voudrez peut-être passer par votre programme avec un débogueur. Astuce: Que se passe-t-il lorsque je saisis «3 4 3»? – Rakete1111
Après avoir détecté un doublon, vous demandez à l'utilisateur d'entrer de nouveau. Vous vérifiez ce nouveau numéro par rapport à un numéro entré immédiatement avant, mais pas à tous les numéros précédemment entrés. Ainsi, l'utilisateur entre "1", puis "2", puis "1". Vous détectez le doublon et demandez à entrer de nouveau. Ils entrent '2', vous vérifiez seulement que' 2! = 1' et ajoutez heureusement le second '2' au vecteur. –