PROGRAMME C
amin009
Messages postés
121
Statut
Membre
-
fiddy Messages postés 441 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 441 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");
.
.
.
.}
}
Configuration: Windows XP Firefox 2.0.0.18
13 réponses
-
bonjour,
et que se passe-t-il au juste ?
-
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.-
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.
-
-
est ce que mon condition d'arrêt est juste dans mon boucle?
-
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"
-
-
tu n'as meme pas ton printf qui marche ?
-
jeveux que le traitement n'execute plus sauf pour les valeurs entre 1 et 12?
-
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é.
-
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");
} -
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));
} -
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));
} -
Salut,
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