Empecher l'execution du programme [Résolu]

Signaler
Messages postés
3
Date d'inscription
lundi 17 août 2009
Statut
Membre
Dernière intervention
19 août 2009
-
Messages postés
3817
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
2 septembre 2020
-
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

Messages postés
3817
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
2 septembre 2020
112
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;
}
Messages postés
238
Date d'inscription
lundi 2 mars 2009
Statut
Membre
Dernière intervention
29 septembre 2011

Salut,
valeur_saisie = SaisirValeur();
Tant que (valeur_saisie != valeur_attendue)
{
valeur_saisie = SaisirValeur();
}


==============================================
Possible meet Impossible to become...Possimpible
==============================================
Messages postés
3
Date d'inscription
lundi 17 août 2009
Statut
Membre
Dernière intervention
19 août 2009

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 .
Messages postés
238
Date d'inscription
lundi 2 mars 2009
Statut
Membre
Dernière intervention
29 septembre 2011

Tu vérifies que que : 0<valeur_saisie<10


==============================================
Possible meet Impossible to become...Possimpible
==============================================
Messages postés
3817
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
2 septembre 2020
112
@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;
}