DEV en C Switch / CASE
Résolu
tibus27
Messages postés
11
Date d'inscription
Statut
Membre
Dernière intervention
-
tibus27 Messages postés 11 Date d'inscription Statut Membre Dernière intervention -
tibus27 Messages postés 11 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai un petit pb avec un switch case qui tourne dans une boucle.
Il y a 4 cas dans mon menu, quand je tape un chiffre non compris il va bien dans le default et revient au menu, le probleme c'est quand je tape une lettre, il va bien dans le default mais par un boucle infini, il ne prend pas en compte le "break". la variable pour le menu est de type "char".
Quelqu'un a t'il une idée de ma boulette ?
Merci
Tibus :-)
J'ai un petit pb avec un switch case qui tourne dans une boucle.
Il y a 4 cas dans mon menu, quand je tape un chiffre non compris il va bien dans le default et revient au menu, le probleme c'est quand je tape une lettre, il va bien dans le default mais par un boucle infini, il ne prend pas en compte le "break". la variable pour le menu est de type "char".
Quelqu'un a t'il une idée de ma boulette ?
Merci
Tibus :-)
A voir également:
- DEV en C Switch / CASE
- Dev c++ - Télécharger - Langages
- Massgrave dev - Accueil - Windows
- Dev home. - Télécharger - Développement
- Dev pascal - Télécharger - Édition & Programmation
- Android switch - Accueil - Android
13 réponses
YOUPI j'ai trouvé en me basant sur l'une de vos réponses, le type de la variable est char et la valeur correspondante du case et celle de la table ASCII 1=49... ect
MERCi pour votre aide voici le code pour ceux qui aurai le problème.
char choixMenu="";
do
{
affichemenu();
scanf("%s",&choixMenu);
printf("\n\n");
switch (choixMenu)
{
case 49: //valeur ascii du chiffre 1
printf("Veuillez entrer votre identifiant :\n\n");
choixMenu="";
break;
case 50://valeur ASCII du chiffre 2
printf("Voici la liste des identifiants :\n\n");
choixMenu="";
break;
case 51://valeur ASCII du chiffre 3
printf("Veuillez entrer l'identifiant recherche :\n\n");
choixMenu="";
break;
case 52://valeur ASCII du chiffre 4
printf("A bientot\n");
return (0);
default:
printf("vous n'avez pas entre un nombre correct ! \n\n");
break;
}
}while (choixMenu != 52);
MERCi pour votre aide voici le code pour ceux qui aurai le problème.
char choixMenu="";
do
{
affichemenu();
scanf("%s",&choixMenu);
printf("\n\n");
switch (choixMenu)
{
case 49: //valeur ascii du chiffre 1
printf("Veuillez entrer votre identifiant :\n\n");
choixMenu="";
break;
case 50://valeur ASCII du chiffre 2
printf("Voici la liste des identifiants :\n\n");
choixMenu="";
break;
case 51://valeur ASCII du chiffre 3
printf("Veuillez entrer l'identifiant recherche :\n\n");
choixMenu="";
break;
case 52://valeur ASCII du chiffre 4
printf("A bientot\n");
return (0);
default:
printf("vous n'avez pas entre un nombre correct ! \n\n");
break;
}
}while (choixMenu != 52);
char choixMenu;
while (choixMenu != 4)
{
affichemenu();
scanf("%ld",&choixMenu);
printf("\n\n");
switch (choixMenu)
{
case 1:
[instruction]
break;
case 2:
[instruction]
break;
case 3:
[instruction]
break;
case 4:
printf("A bientot\n");
break;
default:
printf("vous n'avez pas entre un nombre correct :\n\n");
break;
}
}
while (choixMenu != 4)
{
affichemenu();
scanf("%ld",&choixMenu);
printf("\n\n");
switch (choixMenu)
{
case 1:
[instruction]
break;
case 2:
[instruction]
break;
case 3:
[instruction]
break;
case 4:
printf("A bientot\n");
break;
default:
printf("vous n'avez pas entre un nombre correct :\n\n");
break;
}
}
int choixMenu me semble plus logique pour une comparaison numérique (!=4) et un scanf en %ld.
d'ailleur pourquoi %ld, %d suffirait ?
d'ailleur pourquoi %ld, %d suffirait ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Salut test comme cela sinon passe par do while c'est-a-dire faire jusqu'a plus indiqué dans le context
char choixMenu ="";
while (choixMenu !=" 4")
{
affichemenu();
scanf("%c",&choixMenu); //pour %c je suis plus sur peut etre %s
printf("\n\n");
switch (choixMenu)
{
case "1":
[instruction]
break;
case "2":
[instruction]
break;
case "3":
[instruction]
break;
case "4":
printf("A bientot\n");
break;
default:
printf("vous n'avez pas entre un nombre correct :\n\n");
break;
}
}
mp280272@yahoo.fr
char choixMenu ="";
while (choixMenu !=" 4")
{
affichemenu();
scanf("%c",&choixMenu); //pour %c je suis plus sur peut etre %s
printf("\n\n");
switch (choixMenu)
{
case "1":
[instruction]
break;
case "2":
[instruction]
break;
case "3":
[instruction]
break;
case "4":
printf("A bientot\n");
break;
default:
printf("vous n'avez pas entre un nombre correct :\n\n");
break;
}
}
mp280272@yahoo.fr
Je viens de tester, le problème de boucle infinie ne revient pas maintenent il ne rentre plus dans les case quand je tape 1 par example.
J'ai donc testé le Do / while et le problème est le même.
J'ai réussi à contourner le problème, seul hic il n'affiche pas le menu.
int choixMenu="";
do
{
affichemenu();
scanf("%ld",&choixMenu);
printf("\n\n");
switch (choixMenu)
{
case 1:
[instruction]
break;
case 2:
printf("Voici la liste des identifiants :\n\n");
affichage(i);
break;
case 3:
printf("Veuillez entrer l'identifiant recherche :\n\n");
scanf("%s",buf);//chaine recherché
recherche(i);
break;
case 4:
printf("A bientot\n");
return (0);
default:
printf("vous n'avez pas entre un nombre correct ! \n\n");
choixMenu=5;
break;
}
}while (choixMenu != 5);
J'ai donc testé le Do / while et le problème est le même.
J'ai réussi à contourner le problème, seul hic il n'affiche pas le menu.
int choixMenu="";
do
{
affichemenu();
scanf("%ld",&choixMenu);
printf("\n\n");
switch (choixMenu)
{
case 1:
[instruction]
break;
case 2:
printf("Voici la liste des identifiants :\n\n");
affichage(i);
break;
case 3:
printf("Veuillez entrer l'identifiant recherche :\n\n");
scanf("%s",buf);//chaine recherché
recherche(i);
break;
case 4:
printf("A bientot\n");
return (0);
default:
printf("vous n'avez pas entre un nombre correct ! \n\n");
choixMenu=5;
break;
}
}while (choixMenu != 5);
non plus, sa fonctionne pas mieux, le problème c'est que après avoir commencer à utiliser le programme, une simple faute de frappe me fait sortir ... grrr
Voici un prog qui doit tourner pour faire des tests
void affichemenu()
{
printf("1) Entrer un identifiant\n2) Afficher la liste des identifiants\n");
printf("3) Chercher la position d'un identifiant\n4) Sortir de l'application\n\n");
printf("Veuillez saisir le numero de la fontion :");
}
int main(int argc, char *argv[])
{
int choixMenu="";
int tailleid=0; //taille de l'identifiant.
int i=0;//compteur de saisi.
int j=0;//compteur
int find=1;//paramètre de la recherch
printf("***************************************\nBienvenue dans le programme Identifiant\n***************************************\n\n");
do
{
affichemenu();
scanf("%d",&choixMenu);
printf("\n\n");
switch (choixMenu)
{
case 1:
printf("Veuillez entrer votre identifiant :\n\n");
choixMenu="";
break;
case 2:
printf("Voici la liste des identifiants :\n\n");
choixMenu="";
break;
case 3:
printf("Veuillez entrer l'identifiant recherche :\n\n");
choixMenu="";
break;
case 4:
printf("A bientot\n");
return (0);
default:
printf("vous n'avez pas entre un nombre correct ! \n\nVoici la liste des identifiants : \n\n");
choixMenu=5;
break;
}
}while (choixMenu != 5);
}
void affichemenu()
{
printf("1) Entrer un identifiant\n2) Afficher la liste des identifiants\n");
printf("3) Chercher la position d'un identifiant\n4) Sortir de l'application\n\n");
printf("Veuillez saisir le numero de la fontion :");
}
int main(int argc, char *argv[])
{
int choixMenu="";
int tailleid=0; //taille de l'identifiant.
int i=0;//compteur de saisi.
int j=0;//compteur
int find=1;//paramètre de la recherch
printf("***************************************\nBienvenue dans le programme Identifiant\n***************************************\n\n");
do
{
affichemenu();
scanf("%d",&choixMenu);
printf("\n\n");
switch (choixMenu)
{
case 1:
printf("Veuillez entrer votre identifiant :\n\n");
choixMenu="";
break;
case 2:
printf("Voici la liste des identifiants :\n\n");
choixMenu="";
break;
case 3:
printf("Veuillez entrer l'identifiant recherche :\n\n");
choixMenu="";
break;
case 4:
printf("A bientot\n");
return (0);
default:
printf("vous n'avez pas entre un nombre correct ! \n\nVoici la liste des identifiants : \n\n");
choixMenu=5;
break;
}
}while (choixMenu != 5);
}
voici un progrmme que j'utilise regulierementet qui tourne sans le swith case peut etre que ton compilateur est beuguer sur cette instruction en developpement ne cherche pas trop a perdre de temps réutilise se qui fonctionne .
dans le programme ci-desus si tu declare un int choixmenu; tu ne dois l'initialiser avec ""
#include <stdio.h>
voif AfficherMenu(void)
{
printf("Menu :\n");
printf("1. Saisir un client\n");
--------
printf("5. Quiter le pogrammet\n\n");
printf("Entrez votre choix : ");
}
void SaisirClient(void) {....};
void SaisirProduit(void) {....};
void main (void)
{
int choix;
do
{
AfficherMenu();
scanf("%d", &choix);
if (chois==1) SaisirClient();
else if (choix == 2) ......;
else if (choix == 3) ....;
-------
}
while (choix !=5);
}
si celui-ci ne fonctionne pas change de compilateur
merci de mailler pour ta responce mp280272@yahoo.fr
dans le programme ci-desus si tu declare un int choixmenu; tu ne dois l'initialiser avec ""
#include <stdio.h>
voif AfficherMenu(void)
{
printf("Menu :\n");
printf("1. Saisir un client\n");
--------
printf("5. Quiter le pogrammet\n\n");
printf("Entrez votre choix : ");
}
void SaisirClient(void) {....};
void SaisirProduit(void) {....};
void main (void)
{
int choix;
do
{
AfficherMenu();
scanf("%d", &choix);
if (chois==1) SaisirClient();
else if (choix == 2) ......;
else if (choix == 3) ....;
-------
}
while (choix !=5);
}
si celui-ci ne fonctionne pas change de compilateur
merci de mailler pour ta responce mp280272@yahoo.fr
attention dans le code que je vien de te donner je ne gere pas les erreur de saisie il faut qe tu creer une gestion d'erreur de saisie
Le problème c'est que suis obligé d'utiliser le SWITCH / CASE (éducation nationnal..)
Mais je garde cela au cas ou
Merci :-)
Mais je garde cela au cas ou
Merci :-)
dans ce cas fait une gestion des erreurs de saisie
controle que l'utilisateur rentre bien une valeur entiere
ou force la sortie de la boucle do while dans le default exit do
int choixMenu;
do
{
affichemenu();
do
{
scanf("%ld",&choixMenu);
}
while (controle de la sisier)
printf("\n\n");
switch (choixMenu)
{
case 1:
[instruction]
break;
case 2:
printf("Voici la liste des identifiants :\n\n");
affichage(i);
break;
case 3:
printf("Veuillez entrer l'identifiant recherche :\n\n");
scanf("%s",buf);//chaine recherché
recherche(i);
break;
case 4:
printf("A bientot\n");
return (0);
default:
printf("vous n'avez pas entre un nombre correct ! \n\n");
choixMenu=5;
break;
}
}while (choixMenu != 5);
je pense que je vais bientot laisser tomber mes aides sur CCM rale bole des moderateurs sur se portail
qui mainteant ne souhaite plus que je demande aux personnes de m'esposer en detail leur prob par mail
je test encore une fois ou deux si cela continu je pase sur un autre forum et j'enviterais tout autre personnes ne solicitajnt pas d'aides mes offreanr une aides de faire de même on vraiment trop male recu sur ce forum.
controle que l'utilisateur rentre bien une valeur entiere
ou force la sortie de la boucle do while dans le default exit do
int choixMenu;
do
{
affichemenu();
do
{
scanf("%ld",&choixMenu);
}
while (controle de la sisier)
printf("\n\n");
switch (choixMenu)
{
case 1:
[instruction]
break;
case 2:
printf("Voici la liste des identifiants :\n\n");
affichage(i);
break;
case 3:
printf("Veuillez entrer l'identifiant recherche :\n\n");
scanf("%s",buf);//chaine recherché
recherche(i);
break;
case 4:
printf("A bientot\n");
return (0);
default:
printf("vous n'avez pas entre un nombre correct ! \n\n");
choixMenu=5;
break;
}
}while (choixMenu != 5);
je pense que je vais bientot laisser tomber mes aides sur CCM rale bole des moderateurs sur se portail
qui mainteant ne souhaite plus que je demande aux personnes de m'esposer en detail leur prob par mail
je test encore une fois ou deux si cela continu je pase sur un autre forum et j'enviterais tout autre personnes ne solicitajnt pas d'aides mes offreanr une aides de faire de même on vraiment trop male recu sur ce forum.