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
3834
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
20 octobre 2021
- 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
3834
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
20 octobre 2021
125
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
3834
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
20 octobre 2021
125
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