(C++) Arreter boucle infinie volontairement

Fermé
twintornado Messages postés 20 Date d'inscription mardi 18 mai 2010 Statut Membre Dernière intervention 3 mars 2012 - 2 juin 2010 à 15:56
gargoyle44 Messages postés 15 Date d'inscription mercredi 2 juin 2010 Statut Membre Dernière intervention 7 juin 2010 - 4 juin 2010 à 16:34
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

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 mardi 18 mai 2010 Statut Membre Dernière intervention 3 mars 2012
3 juin 2010 à 10:44
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 mercredi 2 juin 2010 Statut Membre Dernière intervention 7 juin 2010 3
3 juin 2010 à 22:27
#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 mardi 18 mai 2010 Statut Membre Dernière intervention 3 mars 2012
4 juin 2010 à 11:00
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 mercredi 2 juin 2010 Statut Membre Dernière intervention 7 juin 2010 3
4 juin 2010 à 16:34
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 3153 Date d'inscription jeudi 28 janvier 2010 Statut Membre Dernière intervention 4 avril 2024 145
2 juin 2010 à 15:57
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 mardi 18 mai 2010 Statut Membre Dernière intervention 3 mars 2012
2 juin 2010 à 17:21
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 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
2 juin 2010 à 16:21
hello
controle + C ?
0
twintornado Messages postés 20 Date d'inscription mardi 18 mai 2010 Statut Membre Dernière intervention 3 mars 2012
2 juin 2010 à 17:21
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