Non, pas en C standard. Il y a toujours la possibilité d'utiliser kbhit() et getch() (windows only, in conio.h), mais pourquoi ne pas avoir un "0. Quitter le programme" ? C'est tellement simple à implémenter.
Qui plus est:
c'est const char *argv[]
on évite les nombres magiques: on fait un #define ESCAPE 27 (ou #define ESCAPE 0x1b, mon préféré) et on emploie ESCAPE dans le code (ECHAP si tu préfères).
Edit: et comme déjà écrit: lorsqu'on n'utilise pas argc et argv: int main(void)
- Edité par edgarjacobs 10 juin 2024 à 19:41:44
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
Oui, c'est presque ça ! L'appui sur [Echap] permet de sortir du programme, mais...
Quand j'appuie sur 1, 2 ou 3, la redirection ne se fait pas malgré le 'switch(c)', probablement parce que 'c' est un caractère, et donc ce n'est pas un 'int'.
Comment dois-je dénommer switch(c) ?
Autre chose, la compilation du programme tel que je l'ai reçu, a donné deux warnings :
J'ai donc corrigé en '_getch' et en '_kbhit', et là, le programme a fonctionné.
Je crois avoir fait une constatation intéressante sur la sortie d'un programme avec [Echap] (mais je reste prudent...).
J'ai remarqué que l'appui sur la touche [Echap] pour sortir d'un programme est opérationnel si 'choix' est déclaré comme 'char' : ça ne fonctionne pas si 'choix' est déclaré 'int'.
/* Dans cet exemple, le programme affiche un menu à l’écran en utilisant la fonction “printf”
de la bibliothèque standard de C. Pour lire le choix de l’utilisateur, la fonction “_getch”
de la bibliothèque “conio.h” est utilisée pour lire le caractère appuyé sur le clavier sans
avoir besoin d’appuyer sur la touche “Entrée”. La valeur lue est ensuite convertie en entier
et enregistrée dans la variable “choix“. Le programme continue d’afficher le menu jusqu’à ce
que l’utilisateur choisisse l’option [Echap] pour quitter le programme. */
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int main()
{
char choix;
do
{
printf("Menu\n");
printf("1. Option 1\n");
printf("2. Option 2\n");
printf("3. Option 3\n");
choix = _getch();
printf("Vous avez appuye sur la touche %c.\n\n", choix);
} while (choix != 27);
return 0;
}
Voilà ! Je voulais partager ça avec toi (et avec tous ceux que ça intéresse, bien sûr...), si cela se confirme.
Le caractère escape n'est pas "imprimable". C'est le début d'une séquence interprétée par le terminal pour afficher quelque chose ensuite (la séquence esc point, ça fait quelque chose ?)
Pour comprendre ce qui se passe, fais afficher la valeur numérique de choix
Je ne constate pas de différence entre char et int pour sortir par escape. Ce code fonctionne
int c;
do {
puts("\n1. Lire le catalogue");
puts("2. Inscrire un document");
puts("3. etc");
printf("\nVotre choix [Echap pour quitter] : ");
c=_getch();
if(c==0)
getch();
else
if(isalnum(c))
printf("%c\n", c);
} while(c!=ESCAPE);
Mais il y a quand même un piège: appuie sur une touche "spéciale", genre F1 ou insert. Et là, je ne sais plus comment on peut s'en sortir. Dans certain cas, cette modification suffit
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent