Partage
  • Partager sur Facebook
  • Partager sur Twitter

Menu amélioré (Cours langage C)

9 janvier 2016 à 17:02:23

Bonjour à tous je souhaiterai améliorer mon code suite au cours le concernant et je voudrais savoir comment je pourrait faire pour que le menu s'affiche meme apres une erreur de l'utilisateur.

En ce moment si l'utilisateur fait une erreur le programme met bien un message d'erreur mais il s'arrete apres je voudrais qu'il réaffiche le menu  en boucle.

EDIT FINAL : Merci à C0mpuT3ks pour m'avoir guidé pour la solution c'était effectivement un menu() qu'il manquait à la suite du printf du default

Voici le code corrigé actuel:

//--------------------------------------------DIRECTIVE DE PREPROCESSEUR----------------------------------------//

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

//--------------------------------------------MENU DU RESTAURANT-----------------------------------------------//

int menu()
{
    int choix = 0;
    
    do
    {
    
    	printf("Menu :\n");
        printf("1 : Poulet de dinde aux escargots rotis a la sauce bearnaise\n");
        printf("2 : Concombres sucres a la sauce de myrtilles enrobee de chocolat\n");
        printf("3 : Escalope de kangourou saignante et sa gelee aux fraises poivree\n");
        printf("4 : La surprise du Chef (j'en salive d'avance...)\n");
        printf("Votre choix ? ");
        scanf("%d", &choix);

    } while (choix < 1 || choix > 4);

    	
    return choix;
}    

//--------------------------------------------EN TËTE DU PROGRAMME (main)---------------------------------------//

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

//--------------------------------------------SWITCH ENTRE LES DIFFERENTS MENU----------------------------------//

    switch (menu())
    {
        case 1:
            printf("Vous avez pris le poulet\n");
            break;
        case 2:
            printf("Vous avez pris les concombres\n");
            break;
        case 3:
            printf("Vous avez pris l'escalope\n");
            break;
        case 4:
            printf("Vous avez pris la surprise du Chef. Vous etes un sacre aventurier dites donc !\n");
            break;
        default:
        	printf("Vous n'avez pas choisi le bon numero\n");
            menu();
        	break;
    }

    return 0;
}



-
Edité par Bouquin endormi 9 janvier 2016 à 18:08:01

  • Partager sur Facebook
  • Partager sur Twitter
9 janvier 2016 à 17:07:19

Hello ;)

Explique moi ce que fait ce bout de code : < choix = char >

Tu pourrais rappeler la fonction < menu() >.

-
Edité par C0mpuT3ks 9 janvier 2016 à 17:09:13

  • Partager sur Facebook
  • Partager sur Twitter
La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.
9 janvier 2016 à 17:25:47

c'est une erreur je l'ai enlevé j'ai voulu tester si l'utilisateur validait un caractere mais ca n'a pas fonctionné.

et en pratique je fait comment pour retourner la fonction menu? j'ai tenté un return menu; dans default mais ca fonctionne pas ca me dit:

In function 'main':
testcOC.c:186:10: warning: return makes integer from pointer without a cast [enabled by default]
          return menu;

  • Partager sur Facebook
  • Partager sur Twitter
9 janvier 2016 à 17:51:05

@Bruno_Viel : < et en pratique je fait comment pour retourner la fonction menu ? >

Là tu parles de pointeurs sur fonctions, je ne pense pas que tu as abordé le sujet.

Je parle de faire tout simplement : 

    switch (menu())
    {
        case 1:
            printf("Vous avez pris le poulet\n");
            break;
        case 2:
            printf("Vous avez pris les concombres\n");
            break;
        case 3:
            printf("Vous avez pris l'escalope\n");
            break;
        case 4:
            printf("Vous avez pris la surprise du Chef. Vous etes un sacre aventurier dites donc !\n");
            break;
        default:
            printf("Vous n'avez pas choisi le bon numero\n");
            menu(); /* On rappelle la fonction en cas d'erreur de l'utilisateur */
            break;
    }

-
Edité par C0mpuT3ks 9 janvier 2016 à 17:51:38

  • Partager sur Facebook
  • Partager sur Twitter
La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.
9 janvier 2016 à 18:00:37

ha oui c'est ca merci j'ai testé ca mais en erreur j'avais mis :

return menu;

j'ai tenté aussi un

return 1 ; par pur hazard

ps : le programme fonctionne tres bien merci pour l'astuce

  • Partager sur Facebook
  • Partager sur Twitter
10 mars 2016 à 20:21:41

bonsoir ... pourriez vous me dire comment faire pour avoir le message d'erreur justement (ex: si je tape 0, 5 ou autres en entrée) ?? merci d'avance !!
  • Partager sur Facebook
  • Partager sur Twitter
Rickyrozay64
10 mars 2016 à 20:58:06

Rickyrozay64 a écrit:

bonsoir ... pourriez vous me dire comment faire pour avoir le message d'erreur justement (ex: si je tape 0, 5 ou autres en entrée) ?? merci d'avance !!

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

void choixMenu(int choix);
void menu();

void menu()
{
    int choix = 0;

        printf("Menu :\n");
        printf("1 : Poulet de dinde aux escargots rotis a la sauce bearnaise\n");
        printf("2 : Concombres sucres a la sauce de myrtilles enrobee de chocolat\n");
        printf("3 : Escalope de kangourou saignante et sa gelee aux fraises poivree\n");
        printf("4 : La surprise du Chef (j'en salive d'avance...)\n");
        printf("Votre choix ? ");
        scanf("%d", &choix);

    choixMenu(choix);
}

void choixMenu(int choix){
    switch (choix)
    {
        case 1:
            printf("Vous avez pris le poulet\n");
            break;
        case 2:
            printf("Vous avez pris les concombres\n");
            break;
        case 3:
            printf("Vous avez pris l'escalope\n");
            break;
        case 4:
            printf("Vous avez pris la surprise du Chef. Vous etes un sacre aventurier dites donc !\n");
            break;
        default:
            printf("Vous n'avez pas choisi le bon numero\n");
            menu();
            break;
    }
}


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

    menu();

    return 0;
}

-
Edité par Magaes 10 mars 2016 à 21:10:13

  • Partager sur Facebook
  • Partager sur Twitter
15 mars 2016 à 21:30:43

Merci beaucoup pour ta soluce Magaes ....!!!
  • Partager sur Facebook
  • Partager sur Twitter
Rickyrozay64
14 mai 2016 à 12:04:46

c 'est ce que j'ai fait mais ça me bascule automatiquement vers le menu sans afficher le message d'erreur
  • Partager sur Facebook
  • Partager sur Twitter
27 juin 2019 à 2:15:47

Personnellement j'ai préféré utiliser un if et sa à l'air de marcher :

#include <stdlib.h>

#include <stdio.h>

int menu()

{

    int choix = 0;

    while (choix < 1 || choix > 4)

    {

        printf("Menu :\n");

        printf("1 : Poulet de dinde aux escargots rotis a la sauce bearnaise\n");

        printf("2 : Concombres sucres a la sauce de myrtilles enrobee de chocolat\n");

        printf("3 : Escalope de kangourou saignante et sa gelee aux fraises poivree\n");

        printf("4 : La surprise du Chef (j'en salive d'avance...)\n");

        printf("Votre choix ? ");

        scanf("%d", &choix);

        if(choix < 1 || choix > 4){

            printf("Vous n'avez pas choisi le bon numero\n");

            scanf("%d",  &choix);

        }

    }

    return choix;

}

int main(int argc, char *argv[])

{

    switch (menu())

    {

        case 1:

            printf("Vous avez pris le poulet\n");

            break;

        case 2:

            printf("Vous avez pris les concombres\n");

            break;

        case 3:

            printf("Vous avez pris l'escalope\n");

            break;

        case 4:

            printf("Vous avez pris la surprise du Chef. Vous etes un sacre aventurier dites donc !\n");

            break;

    }

    return 0;

}

-
Edité par Jookyll 27 juin 2019 à 2:19:04

  • Partager sur Facebook
  • Partager sur Twitter
Staff 27 juin 2019 à 2:36:23

Bonjour,

Déterrage

Citation des règles générales du forum :

Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.

Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre.
En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.

Au lieu de déterrer un sujet il est préférable :

  • soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
  • soit de créer un nouveau sujet décrivant votre propre contexte
  • ne pas répondre à un déterrage et le signaler à la modération

Je ferme ce sujet. En cas de désaccord, me contacter par MP.

  • Partager sur Facebook
  • Partager sur Twitter