IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

probleme de retours au menu


Sujet :

C

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 115
    Par défaut probleme de retours au menu
    Bonjour a tous,

    Dans mon modeste programme, je souhaiterai, une fois l'apperation affiché, retourner à mon menu (sommaire dans mon code), mais au lieu de cela, il se ferme.
    Si quelqu'un peut m'éguiller ce serais cool

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    #include <stdio.h>
    long Sommaire()
    {
    		long Choix = 0;
    while (Choix < 1 || Choix >2)
    {
    		printf("Que souhaitez vous faire\n");
    		printf("1. Afficher les dimentions\n");
    		printf("2. calculer le volume\n");
     
     
    		scanf("%ld", &Choix);
     
    }
    	return Choix;
    }
     
    struct panneaux
    {
    	int longueur ;
    	int largeur;
    	int epaisseur;
    	int type;
    };
     
    void affiche (struct panneaux p)
    {
    	printf ("panneau de \nLargeur   :%d\nLongueur  :%d\nEpaisseur :%d\nType      :%d\n\n",p.largeur, p.longueur, p.epaisseur, p.type);
    }
    int calc (struct panneaux p)
    {
    return p.longueur*p.largeur*p.epaisseur;
    }
    void saisie (void)
    {
    	printf("Entrer la Largeur, Epaisseur, Longueur, et le Type du panneau\n");
    }
     
    int main (void)
    {
    int result;
     
    struct panneaux p;
    		saisie ();
    		scanf("%d %d %d %d", &p.epaisseur, &p.largeur, &p.longueur, &p.type);
    switch(Sommaire())
    {
    case 1:
    		affiche(p);
    		break;
    		return Sommaire;
    case 2:
     
    		result = calc(p);
    		printf("Volume du panneau : %d cm cube\n", result);
    		break;
    		return Sommaire;
    }
     
    system("PAUSE");
    			return 0;
    }
    Merci

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 400
    Par défaut
    Ces return n'ont rien à faire dans ton switch.
    Tu dois mettre le switch dans une boucle while() ou do-while().
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 115
    Par défaut
    merci,
    de cette sorte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    #include <stdio.h>
    long Sommaire()
    {
    		long Choix = 0;
    while (Choix < 1 || Choix >2)
    {
    		printf("Que souhaitez vous faire\n");
    		printf("1. Afficher les dimentions\n");
    		printf("2. calculer le volume\n");
     
     
    		scanf("%ld", &Choix);
     
    }
    	return Choix;
    }
     
    struct panneaux
    {
    	int longueur ;
    	int largeur;
    	int epaisseur;
    	int type;
    };
     
    void affiche (struct panneaux p)
    {
    	printf ("panneau de \nLargeur   :%d\nLongueur  :%d\nEpaisseur :%d\nType      :%d\n\n",p.largeur, p.longueur, p.epaisseur, p.type);
    }
    int calc (struct panneaux p)
    {
    return p.longueur*p.largeur*p.epaisseur;
    }
    void saisie (void)
    {
    	printf("Entrer la Largeur, Epaisseur, Longueur, et le Type du panneau\n");
    }
     
    int main (void)
    {
    int result;
    long choix2;
     
    struct panneaux p;
    		saisie ();
    		scanf("%d %d %d %d", &p.epaisseur, &p.largeur, &p.longueur, &p.type);
    while (choix2)
    {
    switch(Sommaire())
    {
    case 1:
    		affiche(p);
    		break;
    case 2:
     
    		result = calc(p);
    		printf("Volume du panneau : %d cm cube\n", result);
    		break;
    }
     
    }
     
    system("PAUSE");
    			return 0;
    }
    Le programme se lance, mais genere plein d'erreurs et ne fonctionne pas.

    Mais je ne comprend pas, pourquoi metre le switch dans une boucle qui renvoie lui meme à une boucle ?

  4. #4
    Membre confirmé
    Avatar de Nykoo
    Profil pro
    Inscrit en
    Février 2007
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 234
    Par défaut
    Tu te compliques la vie et tu utilises scanf() tout seul. scanf() va lire le buffer clavier. Si tu as le malheur de taper quelque chose de différent de 1 ou 2 alors tu vas partir en boucle infinie: puisque scanf() va lire le même caractère (différent de 1 et 2) indéfiniment sans le supprimer du buffer.

    Fais plutôt une saisie sécurisée sur trois valeurs: 1, 2, et une autre disons 0.

    0 te permettra de sortir d'une boucle.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 115
    Par défaut
    Tu parles du 2nd while ?

    je l'avais codé comme le 1ier :while (choix2 >1 || choix2<2); mais cela affichait la meme erreur. je pence dailleur que c'est incorecte puisqu'il s'agit de case 1 ...

    Mais je ne saisi pas le principe la :'(

  6. #6
    Membre confirmé
    Avatar de Nykoo
    Profil pro
    Inscrit en
    Février 2007
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 234
    Par défaut
    Je te conseille de simplifier

    En fait un exemple possible:

    Dans ton main:

    tant que choix != 0
    saisir choix
    si choix = 1 faire ceci
    si choix = 2 faire cela
    si choix = 0 ne rien faire
    fin tant que

    Tu as juste à coder la fonction saisir qui serait une fonction sécurisée qui renvoie 1 2 ou 0.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 115
    Par défaut
    je ne comprend pas,
    comment faire la boucle avec le switch, il faut que j'enleve le switch ?
    car dans la 1 iere version, uniquement avec le switch en main, si je rentre 4 5 ou 6 , le programme ne plantait pas mais me redonnait bien le sommaire.

    (je souhaite uniquement apres avoire effectué le choix 2, que le programme me reoriente sur le sommaire plutot que quitter comme il le fait actuellement.)

    Je me plante peut etre sur toute la ligne

  8. #8
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 400
    Par défaut
    C'est tout le switch, y compris l'appel à Sommaire(), qui doit être DANS la boucle.

    À aucun moment je n'ai dit qu'il fallait toucher à Sommaire()...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 115
    Par défaut
    j'ai mis le switch dans la boucle dans mon 2nd post, et ça me donne l'erreur : la variable choix2 est utilisé avant d'etre definie...

    en ce qui concerne le sommaire je repondait surtout à Nykoo.
    Bien que ce soit général, je n'ai pas saisi le principe

  10. #10
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par theoffss Voir le message
    j'ai mis le switch dans la boucle dans mon 2nd post, et ça me donne l'erreur : la variable choix2 est utilisé avant d'etre definie...

    en ce qui concerne le sommaire je repondait surtout à Nykoo.
    Bien que ce soit général, je n'ai pas saisi le principe
    Le principe, c'est comme dans toute activité de construction. Il faut réfléchir avant d'agir.

    Pour construire une maison, il ne suffit pas de savoir aligner des parpaings. Il faut aussi savoir faire un plan. Je ne vois pas pourquoi ce serait différent en informatique.
    1. Commence par exposer clairement ce que tu veux faire (Définition)
    2. Ensuite, établi un algorithme qui décrit exactement le comportement attendu. Fait le d'abord en texte, puis en pseudo-code. (Conception)
    3. Enfin traduit le pseudo-code en C. (Construction)

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 115
    Par défaut
    effectivement, je mis suis mal pris...

    J'ai donc "réorganisé" mon programme, et j'obtiens cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    #include <stdio.h>
     
    typedef struct panneaux p;
     
    struct panneaux
    {
    	int longueur ;
    	int largeur;
    	int epaisseur;
    	int type;
    };
     
    int Sommaire()
    {
    		int choix = 0;
    		int sortie = 0;
     
    while (sortie == 0 && choix>1 || choix<4)
    {
    		system("CLS");
    		printf("--- Menu Principal ---\n\n");
    		printf("Que souhaitez vous faire\n");
    		printf("1. Saisir les dimentions\n");
    		printf("2. Afficher les dimentions\n");
    		printf("3. Calculer le volume\n");
    		printf("4. Quitter\n");
    		scanf("%ld", &choix);
    	switch (choix)
    	{
    	case 1: 
    		ConfigPanneaux();
    				break;
    	case 2:
    		AffConfig();
    				break;
    	case 3:
    		CalcVol();
    				break;
    	case 4:
    		sortie = 1;
     
    	}
    }
    return 0;
     
    }
    int main ()
    {
    	return Sommaire();
    }
     
    int ConfigPanneaux()
    {
    	struct panneaux p;
    	system("CLS");
    	printf("---Menu Saisie---\n\n");
    	printf("Entrer la Largeur, Epaisseur, Longueur, et le Type du panneau\n");
    	scanf("%d %d %d %d", &p.epaisseur, &p.largeur, &p.longueur, &p.type);
     
    system("PAUSE");
    }
    int AffConfig()
    {
    	struct panneaux p;
    	system("CLS");
    	printf("Entrer la Largeur, Epaisseur, Longueur, et le Type du panneau\n");
    	scanf("%d %d %d %d", &p.epaisseur, &p.largeur, &p.longueur, &p.type);
    	printf("---Affichage des parametres du Panneaux---\n\n");
    	printf ("panneau de \nLargeur   :%d\nLongueur  :%d\nEpaisseur :%d\nType      :%d\n\n",p.largeur, p.longueur, p.epaisseur, p.type);
     
    	system ("PAUSE");
    }
    int CalcVol()
    {
    		struct panneaux p;
    		int result = 0;
    	system("CLS");
    	printf("Entrer la Largeur, Epaisseur, Longueur, et le Type du panneau\n");
    	scanf("%d %d %d %d", &p.epaisseur, &p.largeur, &p.longueur, &p.type);
    	result = calc(p);
    	printf("---Calcule du Volume---\n\n");
    	printf("Le panneaux a un volume de :%d Cm Cube\n", result);
    	system("PAUSE");
     
    }
     
    int calc (struct panneaux p)
    {
    return p.longueur*p.largeur*p.epaisseur;
    }
    Comme une solution engendre souvant un probleme (chez moi)j'ai ce gros probleme, la structure ne reste pas sauvegardé en dehors d'une fonction meme fonction, c'est peut etre normal (si oui, je l'apprend) mais cela me pose un gros probleme, je doit redemander de rentrer la structure à chaque "sous menu" alors que je souhaiterai tout simplement y faire appelle de plusieurs fonctions...
    es possible ? ou faut'il que je créé un fichier pour sauvegarder dedans ? (ce que je ne sait pas faire, étant la pour apprendre ... )

  12. #12
    Membre éclairé
    Inscrit en
    Juin 2003
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 55
    Par défaut
    Renseignes toi sur les variables locales et les variables globales.
    En résumé (et en essayant de parler francais) une variable globale est déclarée "hors" des fonctions dans ton fichier .c et sera accessible par toutes tes fonctions car elle correspondra à une adresse mémoire unique dans ton programme. Bien penser à l'initialiser au début du programme.
    Une variable locale est déclarée à l'intérieure d'une fonction et ne sera visible que par celle-ci. A chaque variable locale correspond une adresse mémoire différente reservée quand tu lances la fonction et libérée quand tu la quittes. Attention deux variables locales de même nom n'ont pas la même adresse (sauf coup du hasard).

    En pseudo-code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    #include ....
     
    int var_glob1;
     
    void fonct(void)
    {
        int var_loc1;
     
        var_glob1 = 1;
        var_loc1 = 3;
    }
     
    int main(void)
    {
        int var_loc1 = 4;
     
        var_glob1 = 0;
        fonct();
        printf(var_glob1); // affiche 1
        printf(var_loc1); // affiche 4
    }
    Attention pour les programmes simples les variables globales sont une bonne solution. Dès qu'on complexifie la chose, il faut se mettre au pointeur...

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 115
    Par défaut
    Okai je vois merci

    mais en ce qui concerne les structures ? des "globalles" existes elles aussi ?

  14. #14
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 115
    Par défaut
    Les globales c'est mal.

    Fais passer un pointeur sur ta structure a tes fonctions...

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 115
    Par défaut
    effectivement je n'avais pas pencé aux pointeurs, je vais étudier cela.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Conception] Probleme affichage 1ere rubrique menu
    Par vincedjs dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 27/03/2006, 12h23
  2. Probleme Avec un Extend menu
    Par sezar dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 14/03/2006, 14h46
  3. probleme de retour automatique.
    Par samsso2005 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 7
    Dernier message: 14/03/2006, 13h06
  4. 2 problemes pour faire un menu en CSS
    Par Death83 dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 12/08/2005, 09h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo