Getch sous windows

Fermé
seo610 Messages postés 596 Date d'inscription mardi 9 février 2010 Statut Membre Dernière intervention 30 juin 2015 - 9 mars 2012 à 07:34
seo610 Messages postés 596 Date d'inscription mardi 9 février 2010 Statut Membre Dernière intervention 30 juin 2015 - 10 mars 2012 à 00:44
Bonjour,
Dans le code suivant, tout semble normal, sauf que au bout d'un certain temps, en appuyant sur les touches directionnelles, le programme se ferme automatiquement, sans afficher le printf de la fin.

#include <stdio.h>
#include <stdlib.h>

int lire();

int main()
{
while(1)
{
printf("%c\n", lire());
}
printf("Fin du programme totalement génial.\n");
}

int lire()
{
int a = 0;
a = getch();
if(a == 224)
a = getch();
return a;
}

J'aimerais bien savoir c'est quoi qui cause ça. J'ai un doute que c'est l'oeuvre de getch. (J'ai compilé sous Vista avec gcc de Mingw)
Merci
A voir également:

2 réponses

KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
9 mars 2012 à 08:07
Erreur classique : Si le programme affiche le dernier printf il n'a plus rien à faire donc il se ferme. Si tu veux avoir le temps de voir le message, il faut rajouter une pause à la fin : un getch de plus par exemple.

Par contre je serais étonné qu'il y arrive à ce dernier printf, car ta boucle infini ne peut être interrompu que par une erreur de lecture qui va fermer le programme sans aller afficher cette ligne...

Remarque au passage : la fonction main a type de retour int, il serait donc bien vu de faire un return à la fin de la fonction (0 si le programme se déroule bien).
0
seo610 Messages postés 596 Date d'inscription mardi 9 février 2010 Statut Membre Dernière intervention 30 juin 2015 102
9 mars 2012 à 08:20
Je vais préciser que je le lance en ligne de commande, donc une pause à la fin est inutile et le programme n'est que superflu, on peut se passer de convention pour ne rien alourdir et se concentrer sur l'essentiel. Le printf à la fin est là pour démontrer qu'il y a justement une erreur qui fait fermer le programme et non quitter la boucle. Donc ce que j'aimerais savoir c'est quoi qui cause ça.
0
seo610 Messages postés 596 Date d'inscription mardi 9 février 2010 Statut Membre Dernière intervention 30 juin 2015 102
10 mars 2012 à 00:44
Il semble que ce soit une perturbation externe qui cause la fermeture du programme (Avast). J'ai désactivé l'auto Sandbox, (j'avais jamais remarqué cette fonction (Avast est mode silencieux depuis des lustres)) et le programme marche normalement.
0