(C++) Arreter boucle infinie volontairement

twintornado Messages postés 20 Date d'inscription   Statut Membre Dernière intervention   -  
gargoyle44 Messages postés 15 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

J'ai réalisé un programme qui s'éxécute parfaitement , je voudrais maintenant pouvoir l'arreter a tout moment en entrant quelquechose avec mon clavier.

Voici mon code source ( en simplifié )

int main()
{
int i, nombre;
i=1;
cin>>nombre;
while( i>0 ) // arreter cette boucle a tout moment
{
cout<<nombre<<endl;
nombre=nombre-1;
Sleep(2000);
}
}

Cette routine affiche donc:
100
99
98
97
...

et donc j'aimerais l'arreter des que j'en ai marre sans pour autant utiliser la magnifique croix en haut droite

Merci d'avance

5 réponses

gargoyle44
 
Voilà, ça fonctionne pour moi.

#include <iostream>
#include <string>
#include <windows.h>
#include <conio.h>
using namespace std;

int main()
{
int i, nombre;
i=1;
cin>>nombre;
while( i>0 ) // arreter cette boucle a tout moment
{
cout<<nombre<<endl;
nombre=nombre-1;
Sleep(2000);
if(kbhit())
i = -1;

}
}
1
twintornado Messages postés 20 Date d'inscription   Statut Membre Dernière intervention  
 
On touche presque au but !!!
Bon avec ce que tu m'as donné la fenetre se ferme toujours or je voudrais par exemple retourner a un menu a la fin de la boucle. Par contre c'est bien la fonction kbhit qu'il me manquait je te remercie énormement.
0
gargoyle44 Messages postés 15 Date d'inscription   Statut Membre Dernière intervention   3
 
#include <iostream>
#include <string>
#include <windows.h>
#include <conio.h>
using namespace std;

void Traitement();

int main()
{
int buffer = 0;

do
{
cout<<endl<<"1 : Choisir nombre"<<endl;
cout<<"2 : Quitter"<<endl;
cout<<"Choix : ";
cin>>buffer;
if(buffer == 1)
Traitement();
}while(buffer !=2);
}


void Traitement()
{
int i=1, nombre;
cout<<endl<<"Entrer un nombre : ";
cin>>nombre;
do // arreter cette boucle a tout moment
{
cout<<nombre<<endl;
nombre=nombre-1;
Sleep(2000);
if(kbhit())
i = -1;
}while(i>0);
}
1
twintornado Messages postés 20 Date d'inscription   Statut Membre Dernière intervention  
 
Merci beaucoup ! Cette routine me posait de gros problème. Une derniere petite question juste pour le style : Serait-il possible de paramètrer le kbhit pour la boucle s'arrete avec une touche bien précise. Exemple : Avec ce que j'ai maintenant, avec n'importe quel touche la boucle se ferme maintenant j'aimeraisutiliser Zero et uniquement cette touche pour fermer la boucle ...

Je sais c'est un peu tard de le dire que maintenant
0
gargoyle44 Messages postés 15 Date d'inscription   Statut Membre Dernière intervention   3
 
Tu dois utiliser getch pour récupérer le contenu du buffer (et du même coup, le vider)


		if(kbhit()) 
		{
			buffer = _getch();
			if(buffer == '0')
			i = -1; 	
		}



Voilà, tout simple :).
1
cocodu67... Messages postés 3178 Date d'inscription   Statut Membre Dernière intervention   145
 
bonjour
ça a un rapport avec ça : https://forums.commentcamarche.net/forum/affich-10278616-probleme-de-boucle-infini je pense.

bonne journée
0
twintornado Messages postés 20 Date d'inscription   Statut Membre Dernière intervention  
 
Malheureusement non car le problème du mec en question est qu'il voulait que sa boucle tourne qu'un certain moment en respectant ses conditions, moi je veux que ma boucle tourne vraiment a l'infinie. Je pourrais décider qu'elle tourne 5 min ou 5 heures. Si possible entrer une valeur avec mon clavier qui permettrait un arret normal de programme ou juste sortir de la boucle.
0

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

Posez votre question
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
hello
controle + C ?
0
twintornado Messages postés 20 Date d'inscription   Statut Membre Dernière intervention  
 
Cela ne marche pas car la fenetre se ferme, je veux juste sortir de la boucle puis par exemple enregistrer les valeurs obtenues dans un tableau. Je veux juste décider a quel moment sortir de la boucle sans paramétrer le temps le temps de calcul, juste arreter la boucle quand j'en ai marre.
0