PROGRAMME C
amin009
Messages postés
112
Date d'inscription
Statut
Membre
Dernière intervention
-
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour, je utilise un boucle do .. while dans mon programme
mais il ne marche plus voici mon programme
#include <stdio.h>
void main()
{ int n;
do
{ printf("donner un entier");
scanf("%d",&n);
}
while ((n>=1)&&(n<=12));
switch (n)
{ case 1:printf ("janvier");
case 2:printf ("fevrier");
.
.
.
.}
}
mais il ne marche plus voici mon programme
#include <stdio.h>
void main()
{ int n;
do
{ printf("donner un entier");
scanf("%d",&n);
}
while ((n>=1)&&(n<=12));
switch (n)
{ case 1:printf ("janvier");
case 2:printf ("fevrier");
.
.
.
.}
}
A voir également:
- PROGRAMME C
- Programme demarrage windows - Guide
- Message programmé iphone - Guide
- Mettre en veille un programme - Guide
- Programme word gratuit - Guide
- Cette action ne peut pas être réalisée car le fichier est ouvert dans un autre programme - Guide
13 réponses
A mon avis c'est parce que tu n'as pas initialisé la variable n...
Et puis tu devrais mettre des break; à la fin de chaque case.
Et puis tu devrais mettre des break; à la fin de chaque case.
Salut Dragasani,
je ne pense pas que son problème vienne de là car le test sur la valeur de n est effectué systématiquement après une saisie de son utlisateur, s'il avait utilisé une boucle while il aurait été possible de ne jamais rentrer dans la boucle si n était en dehors des conditions (n>0&&n<13) du à la valeur (quelconque et certainement pourrie) se trouvant à l'emplacment mémoire de n.
je ne pense pas que son problème vienne de là car le test sur la valeur de n est effectué systématiquement après une saisie de son utlisateur, s'il avait utilisé une boucle while il aurait été possible de ne jamais rentrer dans la boucle si n était en dehors des conditions (n>0&&n<13) du à la valeur (quelconque et certainement pourrie) se trouvant à l'emplacment mémoire de n.
effectivement comme le dit Dragasani, il faut mettre des break à la fin de chaque case sinon tu auras certainement à chaque fois soit "décembre" à ton affichage, soit la valeur par defaut de ton printf de ton "default"
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
et sinon ta condition est bien formulée mais nous pensons que cela vient du fait qu'il n'y ai pas de "break" à tes "case"
en fait il faut mettre ton switch dans ta boucle whilme sinon boucle infinie de printf scanf
Ce code là fonctionne :
#include <stdio.h>
void main() {
int n=1;
while ( (n > 0) && (n < 13)){
printf("Saisissez un nombre : ");
scanf("%d",&n);
switch(n){
case 1 :printf("janvier\n");break;
case 2 : printf("fevrier\n");break;
///le reste
default:printf("bye bye\n");break;
}
}
et voilà le tour est joué.
Ce code là fonctionne :
#include <stdio.h>
void main() {
int n=1;
while ( (n > 0) && (n < 13)){
printf("Saisissez un nombre : ");
scanf("%d",&n);
switch(n){
case 1 :printf("janvier\n");break;
case 2 : printf("fevrier\n");break;
///le reste
default:printf("bye bye\n");break;
}
}
et voilà le tour est joué.
Bonjour Amin,
normal, ta condition de rupture de boucle n'est pas bonne. En fait la tu lui dis, demande lui un entier tant qu'il entre un entier compris entre 1 et 12. Tu dois justement poser la condition contraire.
de plus ton switch est incomplet, mais j'imagine que tu le sais. Par contre tu as oublie les break; ce qui signifie que quoi qu'il arrivem les instructions suivant ton "saut" seront toutes executees.
bref, voici ton code corrige ( je me suis permis certaines libertes ) :
#include <stdio.h>
#include <iostream>
using namespace std;
int main(void)
{ int n;
do
{ printf("donner un entier : ");
scanf("%d",&n);
} while(!(n>=1)&&!(n<=12));
printf("Vous avez choisi comme moi : ");
switch(n){
case 1:printf ("janvier \n"); break;
case 2:printf ("fevrier \n"); break;
case 3:printf ("mars \n"); break;
case 4:printf ("avril \n"); break;
case 5:printf ("mai \n"); break;
case 6:printf ("juin \n"); break;
case 7:printf ("juillet \n"); break;
case 8:printf ("aout \n"); break;
case 9:printf ("septembre \n"); break;
case 10:printf ("octobre \n"); break;
case 11:printf ("novembre \n"); break;
case 12:printf ("decembre \n"); break;
}
system("PAUSE");
}
normal, ta condition de rupture de boucle n'est pas bonne. En fait la tu lui dis, demande lui un entier tant qu'il entre un entier compris entre 1 et 12. Tu dois justement poser la condition contraire.
de plus ton switch est incomplet, mais j'imagine que tu le sais. Par contre tu as oublie les break; ce qui signifie que quoi qu'il arrivem les instructions suivant ton "saut" seront toutes executees.
bref, voici ton code corrige ( je me suis permis certaines libertes ) :
#include <stdio.h>
#include <iostream>
using namespace std;
int main(void)
{ int n;
do
{ printf("donner un entier : ");
scanf("%d",&n);
} while(!(n>=1)&&!(n<=12));
printf("Vous avez choisi comme moi : ");
switch(n){
case 1:printf ("janvier \n"); break;
case 2:printf ("fevrier \n"); break;
case 3:printf ("mars \n"); break;
case 4:printf ("avril \n"); break;
case 5:printf ("mai \n"); break;
case 6:printf ("juin \n"); break;
case 7:printf ("juillet \n"); break;
case 8:printf ("aout \n"); break;
case 9:printf ("septembre \n"); break;
case 10:printf ("octobre \n"); break;
case 11:printf ("novembre \n"); break;
case 12:printf ("decembre \n"); break;
}
system("PAUSE");
}
Ah bah dans ce cas la c'est effectivement la bonne condition de rupture de boucle et il suffit de mettre le switch dans la boucle :
#include <stdio.h>
#include <iostream>
using namespace std;
int main(void) {
int n;
do
{
printf("donner un entier (-1 pour arreter): ");
scanf("%d",&n);
printf("Vous avez choisi comme moi : ");
switch(n){
case 1:printf ("janvier \n"); break;
case 2:printf ("fevrier \n"); break;
case 3:printf ("mars \n"); break;
case 4:printf ("avril \n"); break;
case 5:printf ("mai \n"); break;
case 6:printf ("juin \n"); break;
case 7:printf ("juillet \n"); break;
case 8:printf ("aout \n"); break;
case 9:printf ("septembre \n"); break;
case 10:printf ("octobre \n"); break;
case 11:printf ("novembre \n"); break;
case 12:printf ("decembre \n"); break;
system("PAUSE");}
}while((n>=1)&&(n<=12));
}
#include <stdio.h>
#include <iostream>
using namespace std;
int main(void) {
int n;
do
{
printf("donner un entier (-1 pour arreter): ");
scanf("%d",&n);
printf("Vous avez choisi comme moi : ");
switch(n){
case 1:printf ("janvier \n"); break;
case 2:printf ("fevrier \n"); break;
case 3:printf ("mars \n"); break;
case 4:printf ("avril \n"); break;
case 5:printf ("mai \n"); break;
case 6:printf ("juin \n"); break;
case 7:printf ("juillet \n"); break;
case 8:printf ("aout \n"); break;
case 9:printf ("septembre \n"); break;
case 10:printf ("octobre \n"); break;
case 11:printf ("novembre \n"); break;
case 12:printf ("decembre \n"); break;
system("PAUSE");}
}while((n>=1)&&(n<=12));
}
voici le code ,mais toujours demende de saisir un entier:
#include <stdio.h>
void main()
{ int n ;
do
{ printf("donner un entier");
scanf("%d",&n);
switch (n)
{ case 1:printf ("janvier");
break;
case 2:printf ("fevrier");
break;
case 3:printf("mars");
break;
case 4: printf("avril");
break;
case 5: printf("mai");
break;
case 6 :printf("juin");
break;
case 7 : printf("juillet");
break;
case 8: printf("aout");
break;
case 9: printf("septembre");
break;
case 10: printf("octobre");
break;
case 11 :printf("novembre");
break;
case 12 :printf("decembre");}
}
while ((n>=1)&&(n<=12));
}
#include <stdio.h>
void main()
{ int n ;
do
{ printf("donner un entier");
scanf("%d",&n);
switch (n)
{ case 1:printf ("janvier");
break;
case 2:printf ("fevrier");
break;
case 3:printf("mars");
break;
case 4: printf("avril");
break;
case 5: printf("mai");
break;
case 6 :printf("juin");
break;
case 7 : printf("juillet");
break;
case 8: printf("aout");
break;
case 9: printf("septembre");
break;
case 10: printf("octobre");
break;
case 11 :printf("novembre");
break;
case 12 :printf("decembre");}
}
while ((n>=1)&&(n<=12));
}
Salut,
Je donne une autre façon de faire :
A noter, que main() doit renvoyer un int (donc pas void).
Cdlt
Je donne une autre façon de faire :
A noter, que main() doit renvoyer un int (donc pas void).
#include <stdio.h> int main(void){ char *mois[]={"janvier","fevrier","mars","avril","mai","juin","juillet","aout","septembre","octobre","novembre","decembre"}; int n; do{ printf("donnez un entier : ");fflush(stdout); scanf("%d",&n); if(n>0 && n<11) puts(mois[n-1]); }while(n>0 && n<11); return 0; }
Cdlt