Programmation C (Menu)
Fermé
noobsaybot
-
6 févr. 2013 à 05:49
[Dal] Messages postés 6204 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 27 février 2025 - 26 févr. 2013 à 14:52
[Dal] Messages postés 6204 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 27 février 2025 - 26 févr. 2013 à 14:52
A voir également:
- Menu en c
- Menu déroulant excel - Guide
- Windows 11 menu démarrer classique - Guide
- Canon quick menu - Télécharger - Utilitaires
- Réinitialiser menu démarrer windows 10 - Guide
- Excel menu déroulant en cascade - Guide
7 réponses
[Dal]
Messages postés
6204
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
27 février 2025
1 101
Modifié par [Dal] le 6/02/2013 à 10:16
Modifié par [Dal] le 6/02/2013 à 10:16
Salut noobsaybot,
Tu vas devoir utiliser des fonctions non standard en C pour maîtriser ton menu de la sorte (si tu veux pouvoir vider l'écran facilement, si tu ne veux pas que l'utilisateur doive presser ENTER pour valider un choix, si tu veux éviter que l'écran ne défile et que le menu reste en place, si tu veux placer précisément à l'écran les éléments selon les coordonnées de l'écran, etc.).
1.
Pour cela, sous Windows, ton environnement Codeblocks devrait déjà avoir un entête conio.h, qui te donne accès à des fonctions permettant de faire ces choses.
Une description de ces fonctions figure, par exemple, là :
https://code-reference.com/c/conio.h
2.
Alternativement, si tu veux faire un code plus portable, tu peux utiliser une bibliothèque de programmation existante non seulement sous Windows, mais aussi Linux et différents environnements de type Unix, telle que ncurses, ou pdcurses :
http://www.gnu.org/software/ncurses/
https://pdcurses.sourceforge.io/
La documentation est dans le package. Ce sont des librairies très complètes. Tu peux obtenir des binaires compilés pour MinGW utilisables sous Windows ici :
http://gnuwin32.sourceforge.net/install.html
http://gnuwin32.sourceforge.net/packages/pdcurses.htm
Il te faudra les installer et paramétrer ton projet Codeblocks pour qu'il sache où trouver les éléments de la bibliothèque. Tu pourras le faire en t'aidant de la procédure suivante :
https://forums.commentcamarche.net/forum/affich-37594493-codeblocks-installer-une-bibliotheque-librairie
3.
En général, les étudiants utilisent plutôt 1. que 2., car c'est plus directement accessible (même si ce n'est pas terrible), et j'imagine que c'est aussi ce qu'utilise le prof pour la correction et que s'il doit compiler le source, il n'aura pas à installer lui même la librairie.
Dal
Edit : ajout de pdcurses
Tu vas devoir utiliser des fonctions non standard en C pour maîtriser ton menu de la sorte (si tu veux pouvoir vider l'écran facilement, si tu ne veux pas que l'utilisateur doive presser ENTER pour valider un choix, si tu veux éviter que l'écran ne défile et que le menu reste en place, si tu veux placer précisément à l'écran les éléments selon les coordonnées de l'écran, etc.).
1.
Pour cela, sous Windows, ton environnement Codeblocks devrait déjà avoir un entête conio.h, qui te donne accès à des fonctions permettant de faire ces choses.
Une description de ces fonctions figure, par exemple, là :
https://code-reference.com/c/conio.h
2.
Alternativement, si tu veux faire un code plus portable, tu peux utiliser une bibliothèque de programmation existante non seulement sous Windows, mais aussi Linux et différents environnements de type Unix, telle que ncurses, ou pdcurses :
http://www.gnu.org/software/ncurses/
https://pdcurses.sourceforge.io/
La documentation est dans le package. Ce sont des librairies très complètes. Tu peux obtenir des binaires compilés pour MinGW utilisables sous Windows ici :
http://gnuwin32.sourceforge.net/install.html
http://gnuwin32.sourceforge.net/packages/pdcurses.htm
Il te faudra les installer et paramétrer ton projet Codeblocks pour qu'il sache où trouver les éléments de la bibliothèque. Tu pourras le faire en t'aidant de la procédure suivante :
https://forums.commentcamarche.net/forum/affich-37594493-codeblocks-installer-une-bibliotheque-librairie
3.
En général, les étudiants utilisent plutôt 1. que 2., car c'est plus directement accessible (même si ce n'est pas terrible), et j'imagine que c'est aussi ce qu'utilise le prof pour la correction et que s'il doit compiler le source, il n'aura pas à installer lui même la librairie.
Dal
Edit : ajout de pdcurses
Slt Dal, merci pour votre reponse. Je suis perdu dans tes explications, je suis un amateur en programmation c.
svp essaie d'etre plus explicite concernant les questions. Merci et bonne journee.
svp essaie d'etre plus explicite concernant les questions. Merci et bonne journee.
[Dal]
Messages postés
6204
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
27 février 2025
1 101
8 févr. 2013 à 11:41
8 févr. 2013 à 11:41
Au temps pour moi, le header conio.h de MinGW ne comporte pas gotoxy, ni clrscr, etc. (mon usage de cet entête remonte aux compilateurs Borland :-), mais il a getch quand même, et tu peux faire un appel système à cls pour vider la console.
Voilà un exemple simple, qui devrait fonctionner sur Codeblocks avec le compilateur MinGW, sous Windows, et sans ajout de bibliothèques :
Si tu veux un conio complet, tu peux en obtenir un ici http://conio.sourceforge.net/ qu'il te faudra installer (avec la procédure d'installation mentionnée dans mon lien plus haut, et utiliser avec ton code un include sur conio2.h au lieu de conio.h.
Sinon, on peut bricoler des fonctions clrscr et gotoxy avec l'API Windows aussi. Il y a des exemples sur le net qui montrent comment faire.
Dal
Voilà un exemple simple, qui devrait fonctionner sur Codeblocks avec le compilateur MinGW, sous Windows, et sans ajout de bibliothèques :
#include <stdio.h> #include <stdlib.h> #include <conio.h> void affiche_menu() { system("cls"); printf(" Menu\n"); printf(" ====\n\n"); printf(" 1. Faire truc\n"); printf(" 2. Faire machin\n"); printf(" 3. Faire bidule\n"); printf(" 4. Terminer\n\n"); printf("Votre choix : "); } int main() { char ch = ' '; do { affiche_menu(); ch = getch(); switch (ch) { case '1': printf("\nFaire 1\nPressez une touche quelconque"); getch(); break; case '2': printf("\nFaire 2\nPressez une touche quelconque"); getch(); break; case '3': printf("\nFaire 3\nPressez une touche quelconque"); getch(); break; case '4': break; default: printf("\nVotre choix est erroné\nPressez une touche quelconque et réessayez\n"); getch(); break; } } while (ch != '4'); return 0; }
Si tu veux un conio complet, tu peux en obtenir un ici http://conio.sourceforge.net/ qu'il te faudra installer (avec la procédure d'installation mentionnée dans mon lien plus haut, et utiliser avec ton code un include sur conio2.h au lieu de conio.h.
Sinon, on peut bricoler des fonctions clrscr et gotoxy avec l'API Windows aussi. Il y a des exemples sur le net qui montrent comment faire.
Dal
Slt Dal, merci pour votre patience et pour votre aide.
Comment faire(quel code utiliser) pour que mon choix appelle le programme que je veux parmi les autres??
Ou devrais-je dire comment arranger les programmes de manière a ce que si mon choix est: FAIRE UN MACHIN(2) pour que moi choix appelle exactement le programme machin??
Comment faire(quel code utiliser) pour que mon choix appelle le programme que je veux parmi les autres??
Ou devrais-je dire comment arranger les programmes de manière a ce que si mon choix est: FAIRE UN MACHIN(2) pour que moi choix appelle exactement le programme machin??
[Dal]
Messages postés
6204
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
27 février 2025
1 101
11 févr. 2013 à 09:29
11 févr. 2013 à 09:29
Qu'est-ce qu'un "programme" pour toi ?
1.- est-ce du code que tu réalises et que tu intègres à ton code source
ou
2.- un programme exécutable externe à ton programme de menu, ton programme étant alors seulement conçu pour lancer des programmes tiers
Dal
1.- est-ce du code que tu réalises et que tu intègres à ton code source
ou
2.- un programme exécutable externe à ton programme de menu, ton programme étant alors seulement conçu pour lancer des programmes tiers
Dal
Je pense que la réponse c'est le petit 1).N'oublie pas que je suis un débutant Dal.
merci.
merci.
[Dal]
Messages postés
6204
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
27 février 2025
1 101
Modifié par [Dal] le 13/02/2013 à 09:37
Modifié par [Dal] le 13/02/2013 à 09:37
Dans ce cas, si le code de ton programme est court, tu peux l'inclure dans le switch / case, par exemple, pour une addition :
Ou si le code est plus long, tu peux décider de créer une fonction (avant la fonction main). Par exemple, pour la factorielle :
puis
Si le code est très long, tu peux décider de créer un ou plusieurs modules, c'est à dire diviser ton code en plusieurs fichiers .c, regroupant plusieurs fonctions et structures de données cohérentes, avec des fichiers d'entêtes .h contenant les prototypes des fonctions et les types de données. Mais, je ne pense pas qu'à ton stade tu doives utiliser cela.
Dal
case '1': /* demander le nombre 1 */ /* demander le nombre 2 */ /* indiquer le résultat de l'addition de ces deux nombres */ printf("Pressez une touche quelconque"); getch(); break;
Ou si le code est plus long, tu peux décider de créer une fonction (avant la fonction main). Par exemple, pour la factorielle :
unsigned long int factorielle(unsigned int n) { unsigned long int res; /* calcul de la factorielle de n dans res */ return res; }
puis
case '2': unsigned int n; /* demander la valeur de n à l'utilisateur, * dont la factorielle sera calculée */ unsigned long int res = factorielle(n); /* indiquer le résultat de la factorielle de cet entier */ printf("Pressez une touche quelconque"); getch(); break;
Si le code est très long, tu peux décider de créer un ou plusieurs modules, c'est à dire diviser ton code en plusieurs fichiers .c, regroupant plusieurs fonctions et structures de données cohérentes, avec des fichiers d'entêtes .h contenant les prototypes des fonctions et les types de données. Mais, je ne pense pas qu'à ton stade tu doives utiliser cela.
Dal
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Nobsaybot
Messages postés
184
Date d'inscription
samedi 26 mai 2007
Statut
Membre
Dernière intervention
15 juin 2014
22
22 févr. 2013 à 21:00
22 févr. 2013 à 21:00
Salut Dal, je suis a bout de souffre. je n'arrive pas a appeler mes programmes.
En faite c'est la 3eme facon que je veux realiser(car mes codes son tres long).
Voila ce que je fais.
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<time.h>
#include"menu.h" //je rattache ma fonction affiche_menu() au main.c
#include"information.h" //je rattache ma fonction information() au main.c
int main()
{
char ch = 'A';'B';'C';'D';'E';'F';'G';'H';//Declaration des caracteres
do
{
affiche_menu();//Appelle de la fct affiche_menu
ch = getch();
scanf("%c",&ch); //lecture des characteres.
switch (ch)
{
case 'A':
printf("\n\nBienvenue sur le programme permettant de saisir des informations des etudiants\nPressez une touche quelconque");
void information(); //j'appelle ma fonction.
getch();
break;
case 'B':
printf("\n\nBienvenue sur le Programme permettant d afficher les informations saisies au point 1\nPressez une touche quelconque");
getch();
break;
case 'C':
printf("\n\nBienvenue sur le Programme permettant de trouver la factorielle d une valeur entiere\nPressez une touche quelconque");
getch();
break;
case 'D':printf("\n\nBienvenue sur le Programme permettant de trouver la combinaison de deux valeurs entieres");
getch();
break;
case 'E':printf("\n\nBienvenue sur le Programme permettant de former l anagramme d un nom d une personne");
getch();
break;
case 'F':printf("\n\nBienvenue sur le Programme permettant de changer la date de l ordinateur");
getch();
break;
case 'G':printf("\n\nBienvenue sur le Programme permettant d eteindre l ordinateur");
getch();
break;
case 'H':printf("\n\nBienvenue sur le Programme permettant de classer par ordre croissant et decroissant des valeurs saisis");
getch();
break;
default:
printf("\n\nVotre choix est erroné\nPressez une touche quelconque et réessayez\n");
getch();
break;
}
} while (ch != '4');
return 0;
}
Ca marche ps,svp Dal j'ai vous prie de continuer a m'aider.
En faite c'est la 3eme facon que je veux realiser(car mes codes son tres long).
Voila ce que je fais.
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<time.h>
#include"menu.h" //je rattache ma fonction affiche_menu() au main.c
#include"information.h" //je rattache ma fonction information() au main.c
int main()
{
char ch = 'A';'B';'C';'D';'E';'F';'G';'H';//Declaration des caracteres
do
{
affiche_menu();//Appelle de la fct affiche_menu
ch = getch();
scanf("%c",&ch); //lecture des characteres.
switch (ch)
{
case 'A':
printf("\n\nBienvenue sur le programme permettant de saisir des informations des etudiants\nPressez une touche quelconque");
void information(); //j'appelle ma fonction.
getch();
break;
case 'B':
printf("\n\nBienvenue sur le Programme permettant d afficher les informations saisies au point 1\nPressez une touche quelconque");
getch();
break;
case 'C':
printf("\n\nBienvenue sur le Programme permettant de trouver la factorielle d une valeur entiere\nPressez une touche quelconque");
getch();
break;
case 'D':printf("\n\nBienvenue sur le Programme permettant de trouver la combinaison de deux valeurs entieres");
getch();
break;
case 'E':printf("\n\nBienvenue sur le Programme permettant de former l anagramme d un nom d une personne");
getch();
break;
case 'F':printf("\n\nBienvenue sur le Programme permettant de changer la date de l ordinateur");
getch();
break;
case 'G':printf("\n\nBienvenue sur le Programme permettant d eteindre l ordinateur");
getch();
break;
case 'H':printf("\n\nBienvenue sur le Programme permettant de classer par ordre croissant et decroissant des valeurs saisis");
getch();
break;
default:
printf("\n\nVotre choix est erroné\nPressez une touche quelconque et réessayez\n");
getch();
break;
}
} while (ch != '4');
return 0;
}
Ca marche ps,svp Dal j'ai vous prie de continuer a m'aider.
[Dal]
Messages postés
6204
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
27 février 2025
1 101
Modifié par [Dal] le 25/02/2013 à 12:45
Modifié par [Dal] le 25/02/2013 à 12:45
Salut Nobsaybot,
Le minimum, quand tu as des erreurs de syntaxe, c'est de les corriger selon les indications du compilateur, au lieu de poster le code sur le forum en te plaignant que cela "ne marche pas".
Pour tes besoins une déclaration suffit
Si tu utilises conio.h,
Dans ton switch / case, tu ne traites pas le cas où la touche permettant de quitter le menu est pressée (qui doit correspondre à un cas du menu proposé). Si j'en juge par ton code, et qu'on met ce choix à la fin, cela pourrait être "I" (la lettre i majuscule). Donc, rajoute
ton
Enfin, je pense que c'est une mauvaise idée d'exiger des majuscules, et que les chiffres sont mieux, mais c'est toi qui vois. Si tu utilises des lettres, il serait bien de convertir le caractère saisi en lettre majuscule, avec toupper que tu trouves dans l'entête standard ctype.h (à inclure, donc) en faisant
Dal
char ch = 'A';'B';'C';'D';'E';'F';'G';'H';En faisant cela, tu déclares une variable char appelée ch et tu l'initialises à 'A'. Le reste après le ";" génère des erreurs de syntaxe, car tu mets un littéral seul sur une ligne (une ligne se termine par un ";" en C), ce qui ne correspond à rien en C. En tout état de cause, je ne comprends pas ce que tu veux en faire.
Le minimum, quand tu as des erreurs de syntaxe, c'est de les corriger selon les indications du compilateur, au lieu de poster le code sur le forum en te plaignant que cela "ne marche pas".
Pour tes besoins une déclaration suffit
char ch;et c'est tout.
Si tu utilises conio.h,
ch = getch();suffit à récupérer le caractère (la touche pressée, en fait), comme proposé dans le code précédent. Le
scanf("%c", &ch);à la suite doit être retiré. Tu ne peux pas faire les deux. Si tu décides de ne pas utiliser conio.h pour une faire une capture de touche, et que tu veux utiliser une fonction standard tu C, retire conio.h de tes includes et n'utilise pas getch, mais getchar. Cela supposera que la touche entrée soit pressée, en plus de la lettre concernée, comme expliqué précédemment.
Dans ton switch / case, tu ne traites pas le cas où la touche permettant de quitter le menu est pressée (qui doit correspondre à un cas du menu proposé). Si j'en juge par ton code, et qu'on met ce choix à la fin, cela pourrait être "I" (la lettre i majuscule). Donc, rajoute
case 'I': break;avant ton "default".
ton
} while (ch != '4');ne correspond pas au choix de menu pour quitter. Cela serait donc "I" (la lettre i majuscule), et par conséquent
} while (ch != 'I');.
Enfin, je pense que c'est une mauvaise idée d'exiger des majuscules, et que les chiffres sont mieux, mais c'est toi qui vois. Si tu utilises des lettres, il serait bien de convertir le caractère saisi en lettre majuscule, avec toupper que tu trouves dans l'entête standard ctype.h (à inclure, donc) en faisant
ch = toupper(ch);après la saisie effectuée par l'utilisateur et avant tes switch / case.
Dal
Nobsaybot
Messages postés
184
Date d'inscription
samedi 26 mai 2007
Statut
Membre
Dernière intervention
15 juin 2014
22
26 févr. 2013 à 02:35
26 févr. 2013 à 02:35
slt Dal
Si je ne poste pas mes codes sur le forum Dal comment ferez vous pour m'aider a corriger les erreur??? Ce serais plus difficile, Par Ex:
Quel est le principale rôle du getch()??? Il est sensé de demander une pose non??
quel est le rôle de while (ch != '4') et de #include<time.h>???
Que ce qui empêche le console de fermer après l'exécution d'un programme??
Je ne suis pas trop claire sur ce paragraphe.
(Dans ton switch / case, tu ne traites pas le cas où la touche permettant de quitter le menu est pressée (qui doit correspondre à un cas du menu proposé). Si j'en juge par ton code, et qu'on met ce choix à la fin, cela pourrait être "I" (la lettre i majuscule). Donc, rajoute
case 'I':
break;
avant ton "default".
ton
} while (ch != '4');
ne correspond pas au choix de menu pour quitter. Cela serait donc "I" (la lettre i majuscule), et par conséquent
} while (ch != 'I');)
Enfin, je pense que c'est une mauvaise idée d'exiger des majuscules, et que les chiffres sont mieux, mais c'est toi qui vois.
voici comment j'ai mis mon CASE.
case 'A':
case 'a':
Aide moi a finaliser ses programmes.
je veux un boucle,pour redemander un nbre<=12,lorsque le nbre>12.
Pr les nbres negatif il n'y a ps de factorielle!!mon programme retourne: 1 ou autres nbres. Comment l'aranger???
B.Un Programme permettant d afficher des informations saisies en un point donner.
Merci bcp pour vos patiences et vos courages. Salut!!
Nobsaybot.
Si je ne poste pas mes codes sur le forum Dal comment ferez vous pour m'aider a corriger les erreur??? Ce serais plus difficile, Par Ex:
char ch = 'A';'B';'C';'D';'E';'F';'G';'H';//Déclaration des caractèreset
scanf("%c", &ch);ne donnent pas d'erreur en compilant, portant ils le sont.Bref excuse moi quand même si ça te dérange.
Quel est le principale rôle du getch()??? Il est sensé de demander une pose non??
quel est le rôle de while (ch != '4') et de #include<time.h>???
Que ce qui empêche le console de fermer après l'exécution d'un programme??
Je ne suis pas trop claire sur ce paragraphe.
(Dans ton switch / case, tu ne traites pas le cas où la touche permettant de quitter le menu est pressée (qui doit correspondre à un cas du menu proposé). Si j'en juge par ton code, et qu'on met ce choix à la fin, cela pourrait être "I" (la lettre i majuscule). Donc, rajoute
case 'I':
break;
avant ton "default".
ton
} while (ch != '4');
ne correspond pas au choix de menu pour quitter. Cela serait donc "I" (la lettre i majuscule), et par conséquent
} while (ch != 'I');)
Enfin, je pense que c'est une mauvaise idée d'exiger des majuscules, et que les chiffres sont mieux, mais c'est toi qui vois.
voici comment j'ai mis mon CASE.
case 'A':
case 'a':
Aide moi a finaliser ses programmes.
je veux un boucle,pour redemander un nbre<=12,lorsque le nbre>12.
Pr les nbres negatif il n'y a ps de factorielle!!mon programme retourne: 1 ou autres nbres. Comment l'aranger???
if(nombre > 12 && sizeof(long)<=4) puts("Nombre trop grand, sa factorielle ne tiendra pas dans un 'long'."); else { long f = factorielle(nombre); printf("Factorielle: %ld\n", f); }
B.Un Programme permettant d afficher des informations saisies en un point donner.
Merci bcp pour vos patiences et vos courages. Salut!!
Nobsaybot.
[Dal]
Messages postés
6204
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
27 février 2025
1 101
Modifié par [Dal] le 26/02/2013 à 11:45
Modifié par [Dal] le 26/02/2013 à 11:45
Salut Nobsaybot,
char ch = 'A';'B';'C';'D';'E';'F';'G';'H';//Déclaration des caractères
et
scanf("%c", &ch);
ne donnent pas d'erreur en compilant, portant ils le sont.
pour la première ligne, c'est une erreur de syntaxe, mais ton compilateur peut générer le code en l'ignorant comme une instruction sans effet. Si tu compiles avec les "warnings", ton compilateur va se plaindre, avec un message du type "attention : statement with no effect". Tu ne devrais jamais développer quoi que ce soit en C sans paramétrer le compilateur pour afficher les "warnings", te demander pourquoi le compilateur se plaint, et y remédier.
Quel compilateur utilises-tu ?
Pour "scanf("%c", &ch);", c'est une erreur de conception, car getch() retourne déjà la touche pressée, comme déjà expliqué et montré dans le code d'exemple.
Quel est le principale rôle du getch()??? Il est sensé de demander une pose non??
Non, cette fonction contenue dans <conio.h> (non standard) a) attend que l'utilisateur presse une touche et b) renvoie le caractère pressé en valeur de retour.
Elle est décrite ici : https://code-reference.com/c/conio.h/getch
quel est le rôle de while (ch != '4')
C'est la condition qui termine la boucle do. Si tu ne comprend pas cela, revois ton manuel sur les boucles.
et de #include<time.h>???
C'est toi qui as inclus cet entête. Si tu ne sais pas pourquoi tu l'as fait, je n'ai pas d'idée moi même :-)
time.h contient les fonctions suivantes : http://www.cplusplus.com/reference/ctime/
Que ce qui empêche le console de fermer après l'exécution d'un programme??
Je n'ai pas bien compris cette question.
Je ne suis pas trop claire sur ce paragraphe.
(Dans ton switch / case, tu ne traites pas le cas où la touche permettant de quitter le menu est pressée (...)
Dans mon exemple https://forums.commentcamarche.net/forum/affich-27077511-programmation-c-menu#3 c'était la touche '4' qui permettait de quitter le menu, comme l'indiquait mon menu. Vu ton code, je ne pense pas que cela soit ton cas dans ton code à toi.
Enfin, je pense que c'est une mauvaise idée d'exiger des majuscules, et que les chiffres sont mieux, mais c'est toi qui vois.
voici comment j'ai mis mon CASE.
case 'A':
case 'a':
Tu peux faire comme cela, mais utiliser la fonction toupper te permet en une ligne d'éviter d'avoir à écrire 18 lignes, vois mes indications là https://forums.commentcamarche.net/forum/affich-27077511-programmation-c-menu#9
une description de cette fonction standard du C est ici : http://www.cplusplus.com/reference/cctype/toupper/
Aide moi a finaliser ses programmes.(...)
Tes autres questions n'ont rien à voir avec ta demande initiale. Pour que ce fil ne soit pas un fouillis, c'est mieux si tu fais un nouveau sujet pour poser tes nouvelles questions, s'il te plait.
Bon courage,
Dal
char ch = 'A';'B';'C';'D';'E';'F';'G';'H';//Déclaration des caractères
et
scanf("%c", &ch);
ne donnent pas d'erreur en compilant, portant ils le sont.
pour la première ligne, c'est une erreur de syntaxe, mais ton compilateur peut générer le code en l'ignorant comme une instruction sans effet. Si tu compiles avec les "warnings", ton compilateur va se plaindre, avec un message du type "attention : statement with no effect". Tu ne devrais jamais développer quoi que ce soit en C sans paramétrer le compilateur pour afficher les "warnings", te demander pourquoi le compilateur se plaint, et y remédier.
Quel compilateur utilises-tu ?
Pour "scanf("%c", &ch);", c'est une erreur de conception, car getch() retourne déjà la touche pressée, comme déjà expliqué et montré dans le code d'exemple.
Quel est le principale rôle du getch()??? Il est sensé de demander une pose non??
Non, cette fonction contenue dans <conio.h> (non standard) a) attend que l'utilisateur presse une touche et b) renvoie le caractère pressé en valeur de retour.
Elle est décrite ici : https://code-reference.com/c/conio.h/getch
quel est le rôle de while (ch != '4')
C'est la condition qui termine la boucle do. Si tu ne comprend pas cela, revois ton manuel sur les boucles.
et de #include<time.h>???
C'est toi qui as inclus cet entête. Si tu ne sais pas pourquoi tu l'as fait, je n'ai pas d'idée moi même :-)
time.h contient les fonctions suivantes : http://www.cplusplus.com/reference/ctime/
Que ce qui empêche le console de fermer après l'exécution d'un programme??
Je n'ai pas bien compris cette question.
Je ne suis pas trop claire sur ce paragraphe.
(Dans ton switch / case, tu ne traites pas le cas où la touche permettant de quitter le menu est pressée (...)
Dans mon exemple https://forums.commentcamarche.net/forum/affich-27077511-programmation-c-menu#3 c'était la touche '4' qui permettait de quitter le menu, comme l'indiquait mon menu. Vu ton code, je ne pense pas que cela soit ton cas dans ton code à toi.
Enfin, je pense que c'est une mauvaise idée d'exiger des majuscules, et que les chiffres sont mieux, mais c'est toi qui vois.
voici comment j'ai mis mon CASE.
case 'A':
case 'a':
Tu peux faire comme cela, mais utiliser la fonction toupper te permet en une ligne d'éviter d'avoir à écrire 18 lignes, vois mes indications là https://forums.commentcamarche.net/forum/affich-27077511-programmation-c-menu#9
une description de cette fonction standard du C est ici : http://www.cplusplus.com/reference/cctype/toupper/
Aide moi a finaliser ses programmes.(...)
Tes autres questions n'ont rien à voir avec ta demande initiale. Pour que ce fil ne soit pas un fouillis, c'est mieux si tu fais un nouveau sujet pour poser tes nouvelles questions, s'il te plait.
Bon courage,
Dal
Nobsaybot
Messages postés
184
Date d'inscription
samedi 26 mai 2007
Statut
Membre
Dernière intervention
15 juin 2014
22
26 févr. 2013 à 13:49
26 févr. 2013 à 13:49
Slt Dal, merci pour tout. J'utilise Code::Block avec son compilateur par défaut.je me souvient pas le nom.
quel est le rôle de while (ch != '4')
C'est la condition qui termine la boucle do. Si tu ne comprend pas cela, revois ton manuel sur les boucles.
je pensais que c'est la condition while(ch! = '4')qui renvoi la Case
qui empêche le menu d'accepter les erreurs.
laisse tomber la question que vous n'avez pas compris.
Merci pour les références (url), mais je ne pige rien en Anglais,se serait sympa de me donner plutôt des sites en Français.
Concernant les programmes, j'étais obliger de les poster dans ce sujet, car j'ai peur de ne pas avoir de réponse.
j'espere tj t'avoir comme lumiere en C sur le nouveau sujet.
merci, Nobsaybot.
quel est le rôle de while (ch != '4')
C'est la condition qui termine la boucle do. Si tu ne comprend pas cela, revois ton manuel sur les boucles.
je pensais que c'est la condition while(ch! = '4')qui renvoi la Case
default: printf("\n\nVotre choix est erroné\nPressez une touche quelconque et réessayez\n");
qui empêche le menu d'accepter les erreurs.
laisse tomber la question que vous n'avez pas compris.
Merci pour les références (url), mais je ne pige rien en Anglais,se serait sympa de me donner plutôt des sites en Français.
Concernant les programmes, j'étais obliger de les poster dans ce sujet, car j'ai peur de ne pas avoir de réponse.
j'espere tj t'avoir comme lumiere en C sur le nouveau sujet.
merci, Nobsaybot.
[Dal]
Messages postés
6204
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
27 février 2025
1 101
26 févr. 2013 à 14:52
26 févr. 2013 à 14:52
Codeblocks avec MinGW crée normalement des projets C avec Project - Build options - Compiler settings - [x] Enable all compiler warnings.
Donc, l'onglet "Build messages" a dû te donner ces warnings.
Si l'option n'est pas cochée, coche la.
Je n'ai pas de liens de qualité équivalente à te donner en langue française. Je n'en connais pas. Si quelqu'un en connais, je suis preneur :-)
Dal
Donc, l'onglet "Build messages" a dû te donner ces warnings.
Si l'option n'est pas cochée, coche la.
Je n'ai pas de liens de qualité équivalente à te donner en langue française. Je n'en connais pas. Si quelqu'un en connais, je suis preneur :-)
Dal