Partage
  • Partager sur Facebook
  • Partager sur Twitter

MENU PROGRAMME

18 mars 2022 à 1:50:40

Comment écrire un programme en C qui va afficher certains autres programmes bien annotés et lorsqu'on appuie sur un numéro le programme va s'exécuter. Ensuite lorsqu'on appuie sur le dernier numéro on quitte le programme.   
  • Partager sur Facebook
  • Partager sur Twitter
18 mars 2022 à 2:08:27

Sais-tu comment créer un menu, par exemple avec un switch?
Connais-tu la fonction system()?
C'est un bon départ.

Si tu connais les structures, tu n'aurais pas besoin de switch.

On aurait un tableau de structures.

Chaque structure contiendrait un pointeur vers la description du programme, et un autre vers la commande elle-même.

On saisit le choix, on le valide et on adresse directement dans le tableau.

-
Edité par PierrotLeFou 18 mars 2022 à 2:19:07

  • Partager sur Facebook
  • Partager sur Twitter

Le Tout est souvent plus grand que la somme de ses parties.

18 mars 2022 à 2:29:48

Bonjour, Merci de retirer toutes les lettres en capitales de votre titre, et d'écrire un titre de sujet en rapport avec votre problématique. Pas la peine d'écrire en gras, on sait vous lire sans.

Majuscules abusives

L'écriture en majuscules est considérée comme une parole criée et diminue autant la lisibilité du texte que sa compréhension. Les majuscules abusives sont donc interdites aussi bien dans les titres que dans les messages.

Manque de Politesse

Votre message ne comporte pas ou peu de formules de politesse (« Bonjour », « Merci », « Au revoir », etc.). Les règles du site exigent que chaque nouveau message comporte un minimum de politesse. Après tout, les gens qui répondent le font gratuitement, sur leur temps libre. Ils méritent bien un minimum de considération, n'est-ce pas ?

Mauvais titre

Le titre est un élément important qui ne doit pas être négligé. N'oubliez pas cette règle simple : le titre idéal résume la question que vous allez poser en une petite phrase. Il doit permettre aux visiteurs de se repérer facilement dans le forum visité et d'identifier le sujet à sa seule lecture.

Vous pouvez utiliser divers préfixes comme [Erreur], [MySQL], [Compatibilité], etc... Aussi, pensez à consulter les règles propres à chaque forum (visibles dans les topics épinglés en haut des sections).

De plus, choisir un bon titre permet de rendre plus faciles les recherches des autres membres.

Les titres de type "besoin d'aide" ou "problème" ne sont pas tolérés.

Pour modifier votre titre, éditez le premier message de votre sujet.

(titre originel : MENU PROGRAMME)

Liens conseillés

  • Partager sur Facebook
  • Partager sur Twitter
18 mars 2022 à 2:52:59

J'aurais donné comme titre:
Menu commandant l'exécution de programmes

Je pourrais ajouter que si tu veux parler de "boutons", tu devras utiliser une interface graphique comme la SDL.

Et je ne crois pas que tu sois prêt pour cela.

-
Edité par PierrotLeFou 18 mars 2022 à 3:18:18

  • Partager sur Facebook
  • Partager sur Twitter

Le Tout est souvent plus grand que la somme de ses parties.

Anonyme
18 mars 2022 à 15:19:27

Tu peux peut-être pour tester si on tape sur une touche du clavier la lib conio.h,

tu auras besoin de stdio.h et le conio.h dont voici son contenu, tu as juste à créer un nouveau fichier nommé "conio.h" dans ton espace de travail et l'inclure dans ton programme à la compilation en faisant: #include "conio.h":

/*
 * conio.h
 * This file has no copyright assigned and is placed in the Public Domain.
 * This file is a part of the mingw-runtime package.
 * No warranty is given; refer to the file DISCLAIMER within the package.
 *
 * Low level console I/O functions. Pretty please try to use the ANSI
 * standard ones if you are writing new code.
 *
 */

#ifndef	_CONIO_H_
#define	_CONIO_H_

/* All the headers include this file. */
#include <_mingw.h>

#ifndef RC_INVOKED

#ifdef	__cplusplus
extern "C" {
#endif

_CRTIMP char* __cdecl	_cgets (char*);
_CRTIMP int __cdecl	_cprintf (const char*, ...);
_CRTIMP int __cdecl	_cputs (const char*);
_CRTIMP int __cdecl	_cscanf (char*, ...);

_CRTIMP int __cdecl	_getch (void);
_CRTIMP int __cdecl	_getche (void);
_CRTIMP int __cdecl	_kbhit (void);
_CRTIMP int __cdecl	_putch (int);
_CRTIMP int __cdecl	_ungetch (int);


#ifndef	_NO_OLDNAMES

_CRTIMP int __cdecl	getch (void);
_CRTIMP int __cdecl	getche (void);
_CRTIMP int __cdecl	kbhit (void);
_CRTIMP int __cdecl	putch (int);
_CRTIMP int __cdecl	ungetch (int);

#endif	/* Not _NO_OLDNAMES */


#ifdef	__cplusplus
}
#endif

#endif	/* Not RC_INVOKED */

#endif	/* Not _CONIO_H_ */

ensuite, tu fais une boucle while et tu test si une touche est enfoncée:

#include <stdio.h>
#include "conio.h"

int main(int argc, char const *argv[])
{
	char capture;

	unsigned int running = 1;

	while(running == 1)
	{
		printf("test\n");
		if(kbhit())
		{
			capture = getch();
			if(capture == 'w' || 'W')
			{
				printf("W pressed !");
				running = 0;
			}
		}
	}
	return 0;
}




-
Edité par Anonyme 18 mars 2022 à 15:22:27

  • Partager sur Facebook
  • Partager sur Twitter
18 mars 2022 à 15:54:44

Spectrefr a écrit:

tu auras besoin de stdio.h et le conio.h dont voici son contenu, tu as juste à créer un nouveau fichier nommé "conio.h" dans ton espace de travail et l'inclure dans ton programme à la compilation en faisant: #include "conio.h": ...

¿¡¿  ?!? 

  • Partager sur Facebook
  • Partager sur Twitter
...
Anonyme
18 mars 2022 à 16:00:22

rouIoude a écrit:

¿¡¿  ?!? 


Qu'est ce qu'il y a, qu'est ce qu'il y a ??
  • Partager sur Facebook
  • Partager sur Twitter
18 mars 2022 à 16:13:35

Tu penses qu'un fichier entête va suffire ? Et le code (ou fichier lib) des fonctions ?

En générale si on a la bibliothèque, on a le fichier entête qui va avec ! Pas besoin de le créer. Mais une chose est sur il faut les deux !

  • Partager sur Facebook
  • Partager sur Twitter
...
18 mars 2022 à 16:16:51

Pas besoin de code, ça se fait tout seul. :)

Tant que le PO n'aura pas donné signe de vie, on spécule (comme d'habitude)

-
Edité par PierrotLeFou 18 mars 2022 à 16:20:39

  • Partager sur Facebook
  • Partager sur Twitter

Le Tout est souvent plus grand que la somme de ses parties.

Anonyme
18 mars 2022 à 19:51:29

rouIoude a écrit:

Tu penses qu'un fichier entête va suffire ? Et le code (ou fichier lib) des fonctions ?

En générale si on a la bibliothèque, on a le fichier entête qui va avec ! Pas besoin de le créer. Mais une chose est sur il faut les deux !

Lis au lieu de parler pour rien dire
  • Partager sur Facebook
  • Partager sur Twitter
18 mars 2022 à 20:27:21

Spectrefr a écrit:

Lis au lieu de parler pour rien dire

Lire quoi ? De créer un fichier conio.h ? C'est bien ce que tu dis ? :

Spectrefr a écrit:

tu as juste à créer un nouveau fichier nommé "conio.h" ...

Tu pense vraiment que c'est une bonne solution ? Ou tu n'as rien compris à l'utilisation des bibliothèque ?



  • Partager sur Facebook
  • Partager sur Twitter
...
Anonyme
18 mars 2022 à 20:47:36 - Message modéré pour le motif suivant : Les insultes ne sont pas tolérées


18 mars 2022 à 20:58:51

Spectrefr : n'empêche que l'objection de rouIoude est juste :

− Soit on a la bibliothèque conio et il est inutile de créer un fichier "conio.h", il existe déjà.

− Soit on n'a pas cette bibliothèque, et il ne suffit pas de créer le fichier "conio.h", il faut aussi avoir l'exécutable associé.

Ton dernier message est à côté de la plaque parce que rouIoude participe ici depuis des années (je me suis inscrit en 2012 et il me semble qu'il était déjà présent) et est toujours de bon conseil. En tout cas il sait de quoi il parle.

  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
18 mars 2022 à 21:07:30 - Message modéré pour le motif suivant : Message complètement hors sujet


19 mars 2022 à 0:58:16

Pour faire diversion, voici une version "sans" bouton. Tout ce qu'il y a de plus standard:
-
#include <stdio.h>
#include <stdlib.h>
typedef struct Menu Menu;
struct Menu {
    char *des;
    char *cmd;
};
int main(void) {
    Menu menu[] = {
        {"Bonjour tata", "echo Bonjour tata"},
        {"Bonjour toto", "echo Bonjour toto"},
        {"Bonjour maman", "echo Bonjour maman"},
        {"Répertoire courant", "pwd"}
    };
    size_t size = sizeof(menu)/sizeof(menu[0]);
    int choix;
    while(1) {
        for(size_t i=0; i<size; i++)
            printf("%d. %s\n", i+1, menu[i].des);
        printf("%d. Terminer\n> ", size+1);
        scanf("%d", &choix);
        if(choix>=1 && choix<=size+1) break;
        printf("Choix invalide\n");
    }
    if(choix==size+1) return 0;
    system(menu[choix-1].cmd);
    return 0;
}
  • Partager sur Facebook
  • Partager sur Twitter

Le Tout est souvent plus grand que la somme de ses parties.

20 mars 2022 à 0:08:45

conio.h existe déjà, pourquoi le refaire ??? Il ne faut pas oublier qu'un programmeur est avant tout paresseux ...

-
Edité par KevinGL 20 mars 2022 à 0:08:58

  • Partager sur Facebook
  • Partager sur Twitter
20 mars 2022 à 8:57:47

Parce qu'il existe des alternative un peu plus récentes et plus portables qu'un truc issu de Turbo C pour fonctionner en DOS3.22 ? Il y a PDCurses notamment si on veut se lancer dans un TUI (et je ne parle pas de la gestion des événements ou de la souris dans ce cas); mais bon, en général le couple printf/scanf fait largement l'affaire. De plus la première réponse de Pierrot me semble correct et moins HS.

Après, si ça se trouve ce que le PO appelle «programme» sont en fait des fonctions et non des programmes externes …

  • Partager sur Facebook
  • Partager sur Twitter
22 mars 2022 à 9:07:20

Merci pour vos réponses mais je n'ai rien compris du tout. Je suis un débutant donc voilà. soyez un peu plus claire.....

MERCI!!!! 

  • Partager sur Facebook
  • Partager sur Twitter
22 mars 2022 à 9:17:14

@SaturninSpéroAvlessi Bonjour, merci de modifier le titre de votre sujet comme demandé.

La modération

Répondre aux questions posées aiderait à t'aider. et également transmettre le code que tu as écris.

  • Partager sur Facebook
  • Partager sur Twitter
22 mars 2022 à 9:31:34

La première des choses à faire Saturnin est de poser une question qui n'est pas que claire pour toi, mais claire pour tous.

SaturninSpéroAvlessi a écrit:

Comment écrire un programme en C qui va afficher certains autres programmes bien annotés et lorsqu'on appuie sur un numéro le programme va s'exécuter. Ensuite lorsqu'on appuie sur le dernier numéro on quitte le programme.   


c'est quoi un «programme bien annoté» ?
est-ce que tu as une liste de programme (exécutables externes) que tu dois exécuter à partir d'un programme que tu écris toi-même ?
est-ce que ce ne sont que des fonctions que tu auras écrites et que ton programme appellera lors qu'un utilisateur choisiras une option dans un menu ?

c'est quoi «appuie sur un numéro» ?
est-ce que tu auras simplement imprimé à l'écran une correspondance entre un nombre et une fonctionnalité ?
est-ce que c'est quelque chose de plus complexe ?

Si tu as un énoncé alors le plus simple est de nous le partager, ça évite des problèmes XY.

  • Partager sur Facebook
  • Partager sur Twitter
22 mars 2022 à 11:13:50 - Message modéré pour le motif suivant : Merci d'utiliser le bouton code du forum pour insérer votre code


22 mars 2022 à 11:36:09

Utilises le bouton code </> du forum pour poster ton code ! (tu peux modifier ton post, lien modifier en haut à droite du post).
  • Partager sur Facebook
  • Partager sur Twitter
...
22 mars 2022 à 12:29:35

le bouton code en image cela donne :

Et si vous ne respecter pas les règles du forum, je vais être obliger de fermé ce sujet.

  • Partager sur Facebook
  • Partager sur Twitter
22 mars 2022 à 14:06:36

Expliques clairement en français ce que tu veux faire.
Ça te fera avancer, et nous aussi.
  • Partager sur Facebook
  • Partager sur Twitter

Le Tout est souvent plus grand que la somme de ses parties.

22 mars 2022 à 15:02:48

J'ai eu le temps de voir le code, à priori c'est un menu qui appelle des fonctions avec un switch.

Il n'y a pas d'appel de programme, ni de numéro à appuyer, seulement la saisie d'un chiffre qui va servir à rediriger vers la bonne fonction à l'aide du switch. 

  • Partager sur Facebook
  • Partager sur Twitter
...
22 mars 2022 à 17:09:20

@rouIoude:
Des foncions ou des programmes?
Je pourrais modifier mon code pour placer des pointeurs vers fonctions au lieu des commandes.
Pas forcément besoin de switch.
  • Partager sur Facebook
  • Partager sur Twitter

Le Tout est souvent plus grand que la somme de ses parties.

22 mars 2022 à 17:52:35

PierrotLeFou a écrit:

@rouIoude:
Des foncions ou des programmes?

Des fonctions ! 

  • Partager sur Facebook
  • Partager sur Twitter
...
22 mars 2022 à 18:20:16

Ça pourrait avoir l'air de ceci:
-
typedef struct Calls Calls;
struct Calls {
    char *msg;
    void (*fcn)(int[], int);
};
...
    Calls menu [] {
        {"fonction 1", fonction1},
       ...
    };
    // Saisir le choix et le valider comme je l'ai montré plus haut ...
    (*menu[choix].fcn)(tableau, taille);
-
Ici je passe deux paramètres à mes fonctions. Ça peut être modifié.
  • Partager sur Facebook
  • Partager sur Twitter

Le Tout est souvent plus grand que la somme de ses parties.

22 mars 2022 à 19:14:22

Je pense que c'est trop compliqué ! SaturninSpéroAvless a bien précisé qu'il était débutant.
  • Partager sur Facebook
  • Partager sur Twitter