Empecher l'execution du programme

Résolu
dualphil Messages postés 3 Date d'inscription lundi 17 août 2009 Statut Membre Dernière intervention 19 août 2009 - 19 août 2009 à 13:25
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 - 24 août 2009 à 13:25
Voila j'aimerai que dans le main si jamais l'utilisateur saisi une valeur différente d'un chiffre il lui redemande de rentrée un chiffre au lieu de s'exécuter dans le vide.
Je suppose que je dois utiliser un do while mais pour la condition je sais pas trop et pour l'affichage pareille !

5 réponses

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
24 août 2009 à 13:25
Explication du code, suite à une demande par MP.

int getValue()
{
  int i = 0;
  bool stop = false;
  do
  {
    std::cout << "Entrez une valeur entière correcte : ";
    std::string buff;

    // Ici on récupère une ligne (chaîne de caractère) pris sur std::cin, que l'on stocke dans "buff".
    std::getline(std::cin, buff);
    // On créer ensuite un flux de chaîne de caractère initialisé avec le contenu de "buff".
    std::istringstream myStream(buff);
    // Ensuite on on "pousse" ce qu'il y a dans "buff" vers i. C'est à dire on tente une conversion de la chaîne
    // de caractère "buff" en entier. Le résultat est alors stocké dans i, sous forme d'entier.
    // Si on arrive à "pousser", donc si la conversion a réussi, ça renvoie vraie, sinon faux.
    // On stocke alors dans stop, si l'opération à réussi.
    // On pourrait aussi l'écrire comme ceci:
    // if (myStream >> i) // Tenter de convertir "myStream" en entier et dans "i"
    //   stop = true; // Si la conversion a réussi
    // else
    //   stop = false; // Si la conversion a raté
    stop = myStream >> i;

    // Tant qu'on a pas réussi à convertir ce qu'on a récupérer sur std::cin en entier, on
    // on continue de demander quelque chose.
    if (!stop)
    {
      std::cerr << "Valeur incorrecte !" << std::endl;
    }
  }
  while (!stop);

  // Si on est arrivé ici, c'est que la conversion a réussi, et que le résultat est dans i. Donc on le renvoi.
  return i;
}
3
cs_MoH008 Messages postés 238 Date d'inscription lundi 2 mars 2009 Statut Membre Dernière intervention 29 septembre 2011 1
19 août 2009 à 15:16
Salut,
valeur_saisie = SaisirValeur();
Tant que (valeur_saisie != valeur_attendue)
{
valeur_saisie = SaisirValeur();
}


==============================================
Possible meet Impossible to become...Possimpible
==============================================
0
dualphil Messages postés 3 Date d'inscription lundi 17 août 2009 Statut Membre Dernière intervention 19 août 2009
19 août 2009 à 16:07
Pour MoH008

merci de l'effort mais sa ne m'aide pas beaucoup en fait ! vue que je n'ai pas de fonction qui fait la saisie je me contente d'une série de (cout et cin) et il y'a 10 valeur à saisir la condition serai de ne pas saisir autre chose qu'un chiffre en fait et ca je sais pas trop comment le faire .
0
cs_MoH008 Messages postés 238 Date d'inscription lundi 2 mars 2009 Statut Membre Dernière intervention 29 septembre 2011 1
19 août 2009 à 17:17
Tu vérifies que que : 0<valeur_saisie<10


==============================================
Possible meet Impossible to become...Possimpible
==============================================
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
20 août 2009 à 16:57
@dualphil: Il te donnait un pseudo code, pas un code déjà fait.
@MoH008: Ce n'est pas ce qu'il demandait. Il veut récupérer 10 chiffres, par vérifier si celui-ci est compris entre 0 et 10.

Voilà une solution:

#include 
#include <sstream>

int getValue()
{
  int i = 0;
  bool stop = false;

  do
  {
    std::cout << "Entrez une valeur entière correcte : ";
    std::string buff;
    std::getline(std::cin, buff);
    std::istringstream myStream(buff);
    stop = myStream >> i;
    if (!stop)
    {
      std::cerr << "Valeur incorrecte !" << std::endl;
    }
  }
  while (!stop);

  return i;
}

int main()
{
  int values[10];

  for (int i = 0; i < 10; ++i)
  {
    std::cout << "Valeur " << i << "" << std::endl;
    values[i] = getValue();
  }

  std::cout << std::endl << "Valeur entrees :" << std::endl;
  for (int i = 0; i < 10; ++i)
    std::cout << "Valeur " << i << " :"
      << values[i] << std::endl;


  return 0;
}
0
Rejoignez-nous