(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 -
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
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;
}
}
#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;
}
}
#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);
}
#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);
}
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
Je sais c'est un peu tard de le dire que maintenant
Tu dois utiliser getch pour récupérer le contenu du buffer (et du même coup, le vider)
Voilà, tout simple :).
if(kbhit()) { buffer = _getch(); if(buffer == '0') i = -1; }
Voilà, tout simple :).
bonjour
ça a un rapport avec ça : https://forums.commentcamarche.net/forum/affich-10278616-probleme-de-boucle-infini je pense.
bonne journée
ça a un rapport avec ça : https://forums.commentcamarche.net/forum/affich-10278616-probleme-de-boucle-infini je pense.
bonne journée
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
hello
controle + C ?
controle + C ?
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.