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 :

Probléme avec "break" et "continue"


Sujet :

C

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 14
    Points : 9
    Points
    9
    Par défaut Probléme avec "break" et "continue"
    voila j'ai crée un programme qui se présente
    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
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
     
    #include <stdio.h>
    #pragma warning (disable:4996)
     
     
    void Recadrer(int *h,int *min,int *sec)
    {
    	while (*sec>59)
    	{
    		*sec=*sec-60;
    		(*min)++;
        }
     
    		while (*min>59)
    		{
    		   *min=*min-60;
    		   (*h)++;
    		}
     
    		   while (*h>23)
    		   {
    			   *h=*h-24;
    		   }
    }
     
    void Somme(int *hS,int *minS,int *secS,int *h1,int *min1,int *sec1,int *h2,int *min2,int *sec2)
    {
     
    	*hS = *h1 + *h2;
    	*minS = *min1 + *min2;
    	*secS = *sec1 + *sec2;
     
    	*h1 = *hS;
    	*min1 = *minS;
    	*sec1 = *secS;
    }
     
     
     
    void menu(int n)
    {
    	int hS,minS,secS,h1,min1,sec1,h2,min2,sec2;
    	hS=0;
    	minS=0;
    	secS=0;
        switch (n)
     
    	{
    		case 1: printf("Veuillez entrez la 1ere heure, s'il vous plait\n");
    				scanf("%d %d %d",&h1,&min1,&sec1); break; 
     
    		case 2: printf("Veuillez entrez la 2eme heure, s'il vous plait\n");
    				scanf("%d %d %d",&h2,&min2,&sec2); 
     
    		case 3: printf("Vous faites la somme des 2 temps et la stockez dans le temps 1\n");
    				Somme(&hS,&minS,&secS,&h1,&min1,&sec1,&h2,&min2,&sec2);
                    Recadrer(&h1,&min1,&sec1); 
    				printf("La somme des deux heures est %dheures,%dminutes,%dsecondes",h1,min1,sec1);
    				break ; 
     
     
     
    		case 4: printf("Vous faites la somme des 2 temps et la stockez dans le temps 2\n");
    				Somme(&hS,&minS,&secS,&h1,&min1,&sec1,&h2,&min2,&sec2);
                    Recadrer(&hS,&minS,&secS); break ;
    	}
    }    
        void main()
    	{
     
    		int n;
     
     
    		printf("*********VOILA LE MENU********\n\n");
    		printf("CHOIX 1: SAISIE DU TEMPS 1\n");
    		printf("CHOIX 2: SAISIE DU TEMPS 2\n");
    		printf("CHOIX 3: SOMME DES DEUX TEMPS,AFFICHAGE ET SAUVEGARDE DANS TEMPS 1\n");
    		printf("CHOIX 4: SOMME DES DEUX TEMPS,AFFICHAGE ET SAUVEGARDE DANS TEMPS 2\n");
    		printf("CHOIX 5: QUITTER\n\n");
     
    		printf("Veuillez preciser le numero de votre choix\n");
    			scanf("%d",&n);
     
    		    while (n!=1)
    			{
    			printf("Vous devez commencer par entrer la premiere heure, c'est logique\n");
    			scanf("%d",&n);
    			}
    				if (n==1)
    				{
    					menu(n);
    				}
     
                printf("Veuillez preciser le numero de votre choix\n");
    			scanf("%d",&n);
     
    		    while (n!=2)
    			{
    			printf("Vous devez ensuite entrer la deuxieme heure, c'est encore logique\n");
    			scanf("%d",&n);
    			}
    			if (n==2)
    			{
    				menu(n);
    			}
     
    			printf("Veuillez preciser le numero de votre choix\n");
    			scanf("%d",&n);
     
    			while (n!=3 && n!=4)
    			{
    			printf("Vous devez stocker la somme soit dans la premiere soit dans la deuxieme heure\n");
                scanf("%d",&n);
    			}
                if (n==3 || n==4)
    			{
    				menu(n);
     
    			}
     
     
     
    	}
    Ne faites pas attention aux fonction (merci grâce aux forum j'ai pu résoudre ce pb).
    Mais en fait , je veux que l'utilisateur commence forcément par:
    - faire le choix 1 ce qui est logique
    - continuer en faisant logiquement le choix 2,
    -soit il fait le choix 3 soit le choix 4
    - et enfin il sort du programme avec 5 forcément

    J'avais déja réussi à le faire en mettant break à la fin de chaque "case" et en contrôlant le choix de l'utilisateur dans le menu principal avec un "while".
    ainsi , il était obligé de faire 1 ensuite 2 ensuite (3 ou 4) et enfin 5;


    Mais avec "break" à chaque fin de "case", il perd les valeurs (ce qui est logique) de h1,min1,sec1 or le pogramme en a besoin pour réaliser le choix 3 ou 4 .

    comment faire ?
    pour qu'il tienne compte des valeurs que j'entre dans case 1 et case 2 pour faire case 3 ou 4 sans utiliser le "break" qui met mon programme à l'eau

    euh ... quelqu'un peut également m'expliquer à quoi sert " continue" et comment l'utiliser en me donnant un exemple .

    Merci !

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    309
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 309
    Points : 380
    Points
    380
    Par défaut
    Si tu veux forcer l'utilisateur à passer par un choix puis par un autre... Pourquoi fais-tu un menu ?

    Le mot clé "continue" ne sert à ma connaissance que dans les boucles, il va en fait te permettre de sauter une itération, alors que le break dans une boucle permet de sortir de la boucle.

    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int i;
    for(i = -15; i <= 15; i++)
    {
        if(i == 0) continue;
        printf("%d", 100 / i);
    }
    Dans cette boucle totalement inutile, on fait une division de 100 par i, si i est égal à 0 alors on va faire planter le programme, on va donc sauter l'itération qui pose problème en utilisant le continue.

    PS : On t'a forcé à utiliser des boucles dans ta première fonction ? Je dis ça parce qu'il y a des techniques plus simples ici... Les opérateurs /, % et += sont là pour ça.

    PPS : De plus, toutes les variables de ta fonction Somme() n'ont pas besoin d'être sous forme de pointeur.

    PPPS : Si tu connais les structures en C, je te conseille de les utiliser.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 14
    Points : 9
    Points
    9
    Par défaut
    bonne remarque: pourquoi faire un menu ?

    eh , ben c'est le prof qui l'a demandé justement pour s'exercer avec " case".

    on fait un menu également parce que l'utilisateur peut choisir de sortir du programme à n'importe quel moment .

    il peut choisir de faire case 1 et ensuite de sotir du programme.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    309
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 309
    Points : 380
    Points
    380
    Par défaut
    Je veux bien que ton prof t'ai dit d'utiliser un menu... Mais c'est pas parce qu'on te dit qu'il faut faire un menu que TOUT doit être dans le menu.
    Si tu as des parties de code par lesquelles l'utilisateur est obligé de passer, ça n'a rien à faire dans un menu.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 14
    Points : 9
    Points
    9
    Par défaut
    je veux bien mais lis l'enoncé et dis moi ce que je dois faire d'autre en lisant ceci

    1. Ecrire une fonction qui recadre une heure de facon à ce qu'elle soit conforme aux régles générales . C'est ce que j'ai fait avec " Recadrer"
    Jusqu'ici , pas de probléme .

    2. Ecrire une fonction qui réalise la somme de deux heures(sans convertir en nombre total de secondes).Le résultat dera être conforme aux régles énoncées c'est-à-dire on doit recadrer la somme des deux heures .
    Là encore , no probléme .

    3. Ecrire le programme de telle facon qu'un menu soit proposé.
    Choix 1 : Saisie du temps 1
    Choix 2 : Saisie du temps 2
    Choix 3 : Somme de deux temps,affichage des résultats,sauvegarde du résultat dans le temps 1
    Choix 4 : Somme de deux temps,affichage des résultats,sauvegarde du résultat dans le temps 2
    Choix 5 : Quitter


    Alors ?

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 14
    Points : 9
    Points
    9
    Par défaut
    Si je comprends bien , "break" casse carrément les valeurs de "case" , c'est un peu comme un fonction qui à sa sortie perd toutes les valeurs qu'elle a utilisé.

    c'est ca ?


    alors je suis obligé de modifier mon programme mais seulement je tiens à ce que l'utilisateur puisse sortir du pogramme quand il veut , soit aprés avoir entrez la valeur 1 soit aprés la valeur 2 ... n'importe quand et même sans avoir commencé , il peut sortir dés le début .

    y a t'il une instruction que je peux mettre dans case 5 telle que la fenêtre de compilation se ferme aprés avoir écris : Vous quittez le programme .

    merci . j'attends en réfléchissant moi-même.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    309
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 309
    Points : 380
    Points
    380
    Par défaut
    Non, quand un case est choisi, le programme va lire toutes les instructions qui suivent le case et il va s'arrêter au premier break, il sort du switch c'est tout, ça n'efface rien, si tu perds tes valeurs c'est simplement parce que ton menu est dans une fonction séparée.

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 14
    Points : 9
    Points
    9
    Par défaut
    alors finalement que me proposes tu ?

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    309
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 309
    Points : 380
    Points
    380
    Par défaut
    Pour commencer, je pense que ta fonction menu() ne doit pas contenir le switch().
    Le switch doit se trouver dans la fonction main(), ce que tu mets dans la fonction menu() c'est l'affichage du menu et la récupération de la valeur entrée par l'utilisateur. Notamment, c'est la fonction menu qui doit vérifier que l'utilisateur ne choisit pas un menu inexistant.
    Et ta fonction menu() doit retourner la valeur entrée par l'utilisateur.

    De plus, si tu connais déjà les structures, je t'en supplie utilise-les.

    Je vais pas te faire ton exo, mais je vais te donner quelques indices, notamment avec les prototypes des fonctions :

    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
    int menu(void);
     
    int main(void)
    {
        // déclarations de tes variables...
     
        char continuer;
     
        do {
     
            // La valeur choisie par l'utilisateur doit être retournée par menu()
            // Elle sera utilisée par le switch pour savoir où aller dans le programme
            switch(menu())
            {
                // ...
            }
     
            // Code permettant de revenir dans le programme
            printf("Voulez-vous poursuivre le programme ? O/N\nReponse : ");
            scanf("%c", &continuer);
        } while(tolower(continuer) == 'o');
     
        return 0;
    }
    Il te suffira de créer tes variables pour contenir les heures, les minutes et les secondes, éventuellement dans une structure. Tu récupères simplement les valeurs dans le main, comme ça tu ne les perds pas quand tu sors, et ton menu() contient uniquement l'affichage et la récupération du choix de l'utilisateur.

Discussions similaires

  1. Problème avec un Break Point
    Par REDK131 dans le forum Fortran
    Réponses: 8
    Dernier message: 08/05/2015, 08h45
  2. Réponses: 2
    Dernier message: 06/07/2009, 14h46
  3. Problème avec word-break
    Par kevinf dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 28/10/2007, 15h42
  4. [MySQL] Problème avec un double quote
    Par wormseric dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 26/01/2007, 14h44
  5. Formulaires : problème avec les slashes et les quotes
    Par GarGamel55 dans le forum Langage
    Réponses: 1
    Dernier message: 12/10/2005, 15h59

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