Problème d'affichage avec fonction switch
Résolu
Onyx67
Messages postés
132
Date d'inscription
Statut
Membre
Dernière intervention
-
[Dal] Messages postés 6205 Date d'inscription Statut Contributeur Dernière intervention -
[Dal] Messages postés 6205 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
en utilisant la fonction switch pour un petit programme personnel (no comment sur les contenus des printf hein ;) ) , je n'arrive pas à afficher dans le bon ordre les messages :
les premiers messages s'affichent au bon moment, mais dès que le premier scanf arrive, je ne sais pas pourquoi, mais au lieu d'afficher le résultat du scanf comme indiqué dans le programme, il attend que j'ai tapé tous les scanf nécessaires pour enfin afficher tous les messages qui manquaient à la fin!
J'ai essayé de déplacer les printf dans le code, et j'ai l'impression que quelle que soit leur place, la priorité est donnée aux scanf!
Voici mon code :
#include <stdio.h>
#include <stdlib.h>
int Jokes(); // fonction du choix 1
int Unicorns(); // fonction du choix 2
int Sarcastic() ; // fonction du choix 3
int menu()
{
int choix = 0;
printf("Hello Mrs the President, welcome to Sarcastic Unicorns S.A. \n");
printf("What do you want to do today?\n");
printf("1. Make a stupid joke\n");
printf("2. Hug a unicorn\n");
printf("3. Be sarcastic\n");
printf("Type your choice\n");
scanf("%d ", &choix);
if (choix <1 || choix >3)
{
printf("Don't mess with me darling\n");
}
return choix;
}
int main(int argc, char *argv[])
{
switch(menu())
{
case 1 :
printf("You, Valentine and Aurore laugh so hard that everyone is wondering if you're on drugs or not\n");
Jokes();//appel de la fonction Jokes
break ;
case 2 :
printf("You are hugging a unicorn. Beware : it makes you horny :p\n "); // titre du menu et message marrant
Unicorns(); // appel de la fonction Unicorns
break ;
case 3 :
printf("No one else except me understands your sense of humour\n"); // titre du menu et message marrant
Sarcastic();//appel de la fonction Sarcastic
break ;
}
return 0;
}
int Jokes() // fonction appelée lorsqu'on a tapé 1
{
int choix = 0;
printf("1. Ignore the others \n"); // choix proposés : le titre du menu est déjà affiché
printf("2. Blame Aurore\n");
printf("3. Get back to sleep\n");
scanf("%d", &choix);
if (choix <1 || choix >3)
{
printf("Don't mess with me darling\n");
}
switch(choix)
{
case 1 :
printf("\n");
break;
case 2 :
printf("\n");
break;
case 3:
printf("\n");
break;
}
}
int Unicorns() //fonction lorsqu'on a tapé 2
{
int choix = 0;
printf(""); // choix proposés : le titre du menu est déjà affiché
printf("");
printf("");
scanf("%d", &choix);
if (choix <1 || choix >3)
{
printf("Don't mess with me darling\n");
}
switch(choix)
{
case 1 :
printf("1. Continue : it feels so good\n");
break;
case 2 :
printf("2. My unicorn is farting rainbows \n");
break;
case 3:
printf("3. Please don't leave me alone with this unicorn!\n ");
break;
}
}
int Sarcastic() // fonction lorsqu'on a tapé 3
{
int choix = 0;
printf("\n"); // choix proposés : le titre du menu est déjà affiché
printf("\n");
printf("\n");
scanf("%d", &choix);
if (choix <1 || choix >3)
{
printf("Don't mess with me darling\n");
}
switch(choix)
{
case 1 :
printf("Everyone is trying to guess what you're implying\n");
break;
case 2 :
printf("\n");
break;
case 3:
printf("\n");
break;
}
}
Et encore quelques printf vides pour l'instant mais ça m'étonnerait que ce soit le problème!
en utilisant la fonction switch pour un petit programme personnel (no comment sur les contenus des printf hein ;) ) , je n'arrive pas à afficher dans le bon ordre les messages :
les premiers messages s'affichent au bon moment, mais dès que le premier scanf arrive, je ne sais pas pourquoi, mais au lieu d'afficher le résultat du scanf comme indiqué dans le programme, il attend que j'ai tapé tous les scanf nécessaires pour enfin afficher tous les messages qui manquaient à la fin!
J'ai essayé de déplacer les printf dans le code, et j'ai l'impression que quelle que soit leur place, la priorité est donnée aux scanf!
Voici mon code :
#include <stdio.h>
#include <stdlib.h>
int Jokes(); // fonction du choix 1
int Unicorns(); // fonction du choix 2
int Sarcastic() ; // fonction du choix 3
int menu()
{
int choix = 0;
printf("Hello Mrs the President, welcome to Sarcastic Unicorns S.A. \n");
printf("What do you want to do today?\n");
printf("1. Make a stupid joke\n");
printf("2. Hug a unicorn\n");
printf("3. Be sarcastic\n");
printf("Type your choice\n");
scanf("%d ", &choix);
if (choix <1 || choix >3)
{
printf("Don't mess with me darling\n");
}
return choix;
}
int main(int argc, char *argv[])
{
switch(menu())
{
case 1 :
printf("You, Valentine and Aurore laugh so hard that everyone is wondering if you're on drugs or not\n");
Jokes();//appel de la fonction Jokes
break ;
case 2 :
printf("You are hugging a unicorn. Beware : it makes you horny :p\n "); // titre du menu et message marrant
Unicorns(); // appel de la fonction Unicorns
break ;
case 3 :
printf("No one else except me understands your sense of humour\n"); // titre du menu et message marrant
Sarcastic();//appel de la fonction Sarcastic
break ;
}
return 0;
}
int Jokes() // fonction appelée lorsqu'on a tapé 1
{
int choix = 0;
printf("1. Ignore the others \n"); // choix proposés : le titre du menu est déjà affiché
printf("2. Blame Aurore\n");
printf("3. Get back to sleep\n");
scanf("%d", &choix);
if (choix <1 || choix >3)
{
printf("Don't mess with me darling\n");
}
switch(choix)
{
case 1 :
printf("\n");
break;
case 2 :
printf("\n");
break;
case 3:
printf("\n");
break;
}
}
int Unicorns() //fonction lorsqu'on a tapé 2
{
int choix = 0;
printf(""); // choix proposés : le titre du menu est déjà affiché
printf("");
printf("");
scanf("%d", &choix);
if (choix <1 || choix >3)
{
printf("Don't mess with me darling\n");
}
switch(choix)
{
case 1 :
printf("1. Continue : it feels so good\n");
break;
case 2 :
printf("2. My unicorn is farting rainbows \n");
break;
case 3:
printf("3. Please don't leave me alone with this unicorn!\n ");
break;
}
}
int Sarcastic() // fonction lorsqu'on a tapé 3
{
int choix = 0;
printf("\n"); // choix proposés : le titre du menu est déjà affiché
printf("\n");
printf("\n");
scanf("%d", &choix);
if (choix <1 || choix >3)
{
printf("Don't mess with me darling\n");
}
switch(choix)
{
case 1 :
printf("Everyone is trying to guess what you're implying\n");
break;
case 2 :
printf("\n");
break;
case 3:
printf("\n");
break;
}
}
Et encore quelques printf vides pour l'instant mais ça m'étonnerait que ce soit le problème!
A voir également:
- Problème d'affichage avec fonction switch
- Fonction si et - Guide
- Affichage double ecran - Guide
- Android switch - Accueil - Android
- Problème affichage fenêtre windows 10 - Guide
- Smart switch pc - Télécharger - Divers Bureautique
2 réponses
Salut Onyx67,
Sur le scanf de ta fonction menu(), tu as ajouté un espace après le spécificateur %d :
Dal
Sur le scanf de ta fonction menu(), tu as ajouté un espace après le spécificateur %d :
scanf("%d ", &choix);, retire cet espace, et essaye.
Dal
Merci beaucoup!! ça marche effectivement!
Je ne pensais pas que les espaces avaient de l'importance en C pourtant!
Je ne pensais pas que les espaces avaient de l'importance en C pourtant!
Voilà ma compréhension :
un espace dans le spécificateur de scanf signifie : lire et ignorer un ou plusieurs espaces blancs consécutifs jusqu'au prochain espace non "blanc". Or, pour scanf, les espaces blancs sont : le caractère espace, tabulation et '\n' (retour à la ligne).
http://www.cplusplus.com/reference/cstdio/scanf/
Donc, en mettant un espace à la fin de ton spécificateur, tu dis à scanf de lire et d'ignorer les espaces blancs à la suite du décimal capturé jusqu'au prochain caractère non-blanc, ce qui a pour effet de lire et d'ignorer le retour à la ligne et de réclamer au moins un autre caractère non blanc à saisir.
Dal
un espace dans le spécificateur de scanf signifie : lire et ignorer un ou plusieurs espaces blancs consécutifs jusqu'au prochain espace non "blanc". Or, pour scanf, les espaces blancs sont : le caractère espace, tabulation et '\n' (retour à la ligne).
http://www.cplusplus.com/reference/cstdio/scanf/
Donc, en mettant un espace à la fin de ton spécificateur, tu dis à scanf de lire et d'ignorer les espaces blancs à la suite du décimal capturé jusqu'au prochain caractère non-blanc, ce qui a pour effet de lire et d'ignorer le retour à la ligne et de réclamer au moins un autre caractère non blanc à saisir.
Dal