2017-10-11 9 views
-2

J'ai été assigné à écrire un programme en C++ pour prendre l'entrée de l'utilisateur, effectuer un calcul, puis présenter l'utilisateur avec l'information après que les calculs ont été effectués.While boucle ou fonction pour la validation d'entrée

Les spécificités du programme ne sont pas nécessaires, puisque ma question est en référence à la validation d'entrée spécifiquement. Qu'est-ce qui est considéré comme une meilleure pratique/plus pratique pour valider plusieurs entrées d'utilisateur?

  1. En utilisant une boucle while dans int main() pour attraper une mauvaise entrée après chaque instruction cin

OU

  1. transmission d'une entrée à une fonction avec 1 boucle while à valider l'entrée, retourner l'entrée.

Je suis assez nouveau à la programmation en général, et ont seulement travaillé en C++ pour quelques semaines, et mon instinct Greenhorn me dire de créer quelques boucles dans whileint main() et l'appeler un jour. Quelque chose me dit qu'une fonction serait une meilleure idée, parce que, vous savez, l'orientation de l'objet.

Merci d'avance. - Wes

+1

pourrait être pertinent: https://stackoverflow.com/questions/2075898/good-input-validation-loop-using-cin-c – aug

+0

Mon conseil est d'essayer les deux et décider vous-même . Vous gagnerez une bien meilleure expérience en étant pratique et en ne vous fiant pas aux préférences subjectives des autres. Cela dit, vous pouvez trouver que si vous devez prendre plusieurs entrées imbriquées et que vous voulez pouvoir quitter n'importe lequel d'entre eux, la fonction est meilleure pour les entrées imbriquées car cela évite le problème de 'casser 'des boucles imbriquées. –

Répondre

0

Vous avez raison de le mettre dans une fonction, l'encapsulation est toujours plus facile à long terme (même si vous ne regarderez plus jamais ce programme), et il est utile de garder une bonne pratique peu importe le projet!

Si vous n'êtes pas l'intention de faire des changements à l'entrée et il est un cas d'entrée valide ou entrée non valide, alors vous pouvez toujours revenir un bool pour que vous puissiez faire quelque chose comme

if(inputValidator() == true) 
{ 
    //perform calculations 
} 
else 
{ 
    //Tell the user their input is incorrect and prompt for the input again 
} 
+0

Comment ferais-je cela sans initialiser une variable à passer à 'inputValidator()'?Par exemple, je veux que l'utilisateur saisisse un nombre, qui sera stocké dans 'int a', mais lors d'une vérification logique dans une condition, telle que' if (inputValidator (a) == true) ', le compilateur lance un erreur, indiquant que 'int a' n'est pas initialisé. Est-ce que je manque quelque chose? –

+0

lors de la création de la variable a juste l'initialiser à 0 ou autre chose de votre choix. Cela ressemblerait à quelque chose comme ça. int a = 0; –

0

Faire fonction de valider une entrée est une façon intéressante de résoudre le problème. Mais je doute que ce ne soit pas nécessaire au niveau de codage - puisque vous avez dit que vous êtes un programmeur débutant. Si vous ne vérifiez qu'une seule entrée à la fois, la meilleure façon de procéder sera simplement while si vous vérifiez plusieurs looks, vous pouvez utiliser quelque chose de similaire à while mais utilisez une boucle for pour parcourir toutes les entrées. Bonne chance à vous!

0

Dans la portée que vous avez décrite, il n'est généralement pas nécessaire de créer une fonction, car vous pouvez tout regrouper dans int main et ne pas avoir beaucoup de problème. Toutefois, si votre liste est de taille variable, vous pouvez utiliser une boucle for en fonction du nombre d'entrées que vous recevez et créer un vérificateur d'exceptions pour celles-ci. Tels que:

string myOutput; 
for (int i = 0; i < totalInputs; i++) { 
    cin << myInput; 
    myOutput = exeptionHandle(myInput); 
    cout << myOutput; 
}