CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Problème exercice C++

vive_cod4
vive_cod4
Niveau 9
06 février 2012 à 21:19:12

Salut tout le monde !

Je suis entrain de lire le livre "Programmation principes et pratique avec C++, de B.S." et je suis bloqué à un exercice tout bête :

"Ecrivez un programme consistant en une boucle while qui lit deux ints puis les affiches. Le programme doit quitter à la saisie d'un '|' final".

Mon problème,c'est que je dois lire que des ints, et donc si je tape un '|' j'obtiens une boucle infini.

Voici mon code :

int i=0,j=0;
while(i!='|' && j!='|')
{
cin >> i >> j;
cout << i << "\t" << j <<endl;
}

J'ai pensé à mettre la ligne des cin dans la condition,mais si je tape un autre caractère que des chiffres, j'arrête,donc si je tape 's' je sors, et le but c'est de sortir seulement avec le caractère '|'. Une solution sans passer par les chars ?

Merci

ArgentComptant
ArgentComptant
Niveau 5
06 février 2012 à 22:08:54

Récupère plutôt en tant que caractère et fait la conversion en int si nécessaire plutôt non ?

vive_cod4
vive_cod4
Niveau 9
06 février 2012 à 22:36:09

Oui j'avais bien pensé à faire

char c;
int i;
if(c=='|')
exit(1);
i=c;
...

Mais justement, la consigne dit de lire en int, c'est pour ça que je me demandais comment faire ? Enfin, si c'est possible ...

chris_27
chris_27
Niveau 10
07 février 2012 à 13:14:41

Bonjour.

Tu peux faire une chose comme :

  1. include <iostream>

int main()
{
      int i, j;

      while (std::cin >> i >> j)
            std::cout << i << " " << j << std::endl;

      return 0;
}

mais ça ne fera pas exactement ce que tu veux, au sens où ça va s'arrêter dès que tu saisis autre chose que des entiers (qui tiennent dans un int).

Au passage, si quelqu'un a des explications précise sur ce qui arrive à cin dans mon code ci-dessus, et sur comment faire pour lire des choses depuis cin après mon while, je suis preneur.

godrik
godrik
Niveau 30
07 février 2012 à 14:25:04

Rewind?

Cris, pas bien compris ta question mais quand tu lis un type incorrect, le token est lu et le bit bad (ou fail je sais jamais) est mis a 1.

chris_27
chris_27
Niveau 10
07 février 2012 à 14:54:29

Déjà, je ne sais pas trop comment il faut interpréter le passage du retour de "cin >> i >> j" (qui est une référence vers un istream) au type booléen. Quand a-t'on faux ? Quand a-t-on vrai ? Peut on être plus fin qu'un simple booléen (sachant que faire "== 2" pour tester le nombre de token lus comme on le ferait en C pour scanf ne marche pas).

Ensuite, si jamais une conversion a merdé, je ne connais pas de moyen de pouvoir réutiliser le istream à nouveau (mais je n'ai jamais fait de rewind).

vive_cod4
vive_cod4
Niveau 9
07 février 2012 à 19:01:38

Chris_27 merci de ta réponse, mais ça revient à mon problème (si on utilise un while) que si on rentre autre chose que '|', comme 'a', ça cassera aussi.

Donc j'en conclue que l'on peut seulement utiliser un char avant de le passer en int ?

vive_cod4
vive_cod4
Niveau 9
07 février 2012 à 20:52:59

Chris -> J'ai une des réponses de tes questions : "Déjà, je ne sais pas trop comment il faut interpréter le passage du retour de "cin >> i >> j" (qui est une référence vers un istream) au type booléen. Quand a-t'on faux ? Quand a-t-on vrai ? Peut on être plus fin qu'un simple booléen (sachant que faire "== 2" pour tester le nombre de token lus comme on le ferait en C pour scanf ne marche pas)."

En continuant la lecture du livre, je vois un exemple qui traite des erreurs qui dit : (je l'ai modifié pour qu'il lit 2 valeurs en int)

int i,j;

cin>>i>>j;
if(cin)
cout << "OK";
else
cout << "KO";

Je sais pas si ça répond à une partie de ta question,mais on sait jamais

chris_27
chris_27
Niveau 10
07 février 2012 à 21:11:07

Ça ne répond pas vraiment à ma question, au sens où je cherche à comprendre quel est le bout de code qui est en charge de transformer un istream& en bool, sachant que je n'ai pas trouvé en regardant dans la description de la classe istream sur cplusplus.com.

Après, ce que tu montres correspond effectivement à ce à quoi on s'attend intuitivement. Quand le cin marche, on a une réponse à vrai, et sinon on a une réponse à faux.

godrik
godrik
Niveau 30
08 février 2012 à 00:02:00

la conversion stram => boolean est faite en regardant les bit fail() et bad().

On peut les remettre a zero avec clear().

Poneymovez
Poneymovez
Niveau 9
20 juin 2012 à 14:26:27

J'ai commencé le C++ il y a une heure et je te l'ai fait en deux minutes :
int main()
{
int j;
char i;

while (i != '|')
{
cin >> i,j;
cout << j << "\t" << i << endl;
cout << i << "\t" << j << endl;
j++;
}
return 0;
}

Bref :) !

Adblock_Crack
Adblock_Crack
Niveau 6
20 juin 2012 à 15:21:50

Poneymovez, c'est faux, là tout ce que tu fais c'est lire un caractère et le mettre dans i.

Sous forums
  • Aide à l'achat Mac
  • Internet
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment