PROGRAMME C

Fermé
amin009 Messages postés 112 Date d'inscription jeudi 2 octobre 2008 Statut Membre Dernière intervention 20 février 2010 - 12 déc. 2008 à 17:25
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 12 déc. 2008 à 18:36
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");
.
.
.
.}
}

13 réponses

daronmaster Messages postés 326 Date d'inscription vendredi 12 janvier 2007 Statut Membre Dernière intervention 11 mai 2009 44
12 déc. 2008 à 17:29
bonjour,

et que se passe-t-il au juste ?
0
Utilisateur anonyme
12 déc. 2008 à 17:32
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.
0
daronmaster Messages postés 326 Date d'inscription vendredi 12 janvier 2007 Statut Membre Dernière intervention 11 mai 2009 44
12 déc. 2008 à 17:36
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.

0
Utilisateur anonyme > daronmaster Messages postés 326 Date d'inscription vendredi 12 janvier 2007 Statut Membre Dernière intervention 11 mai 2009
12 déc. 2008 à 17:37
Oulala oui honte à moi je devrais aller me coucher lol
0
amin009 Messages postés 112 Date d'inscription jeudi 2 octobre 2008 Statut Membre Dernière intervention 20 février 2010
12 déc. 2008 à 17:33
est ce que mon condition d'arrêt est juste dans mon boucle?
0
daronmaster Messages postés 326 Date d'inscription vendredi 12 janvier 2007 Statut Membre Dernière intervention 11 mai 2009 44
12 déc. 2008 à 17:38
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"
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
daronmaster Messages postés 326 Date d'inscription vendredi 12 janvier 2007 Statut Membre Dernière intervention 11 mai 2009 44
12 déc. 2008 à 17:41
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"
0
Utilisateur anonyme
12 déc. 2008 à 17:42
Non je ne pense pas que les break empêchent le programme de tourner. C'est juste que ce n'est pas propre et plus lent si on ne les mets pas à mon avis.
0
amin009 Messages postés 112 Date d'inscription jeudi 2 octobre 2008 Statut Membre Dernière intervention 20 février 2010
12 déc. 2008 à 17:41
mon problème c'est que la boucle while n'exécute plus?
0
Utilisateur anonyme
12 déc. 2008 à 17:45
Laisse tomber j'avais pas les yeux en face des trous.

#include <stdio.h>

void main()
{
   
int n;

do
{
    printf("donner un entier\n");
    scanf("%d",&n);
    switch (n)
    {
        case 1:
        printf ("janvier");
        break;
        case 2:
        printf ("fevrier");
        break;
        .
        .
        .
    }

}

while ((n>=1)&&(n<=12));

}
0
daronmaster Messages postés 326 Date d'inscription vendredi 12 janvier 2007 Statut Membre Dernière intervention 11 mai 2009 44 > Utilisateur anonyme
12 déc. 2008 à 17:48
j'ai fait la même ... lol
0
daronmaster Messages postés 326 Date d'inscription vendredi 12 janvier 2007 Statut Membre Dernière intervention 11 mai 2009 44
12 déc. 2008 à 17:43
tu n'as meme pas ton printf qui marche ?
0
amin009 Messages postés 112 Date d'inscription jeudi 2 octobre 2008 Statut Membre Dernière intervention 20 février 2010
12 déc. 2008 à 17:43
jeveux que le traitement n'execute plus sauf pour les valeurs entre 1 et 12?
0
daronmaster Messages postés 326 Date d'inscription vendredi 12 janvier 2007 Statut Membre Dernière intervention 11 mai 2009 44
12 déc. 2008 à 17:47
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é.



0
Utilisateur anonyme
12 déc. 2008 à 17:49
hé hé les grands esprits se rencontrent on a été assez synchro sur ce coup
0
Mastaking Messages postés 35 Date d'inscription samedi 10 mars 2007 Statut Membre Dernière intervention 5 septembre 2011 14
12 déc. 2008 à 17:47
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");
}
0
Utilisateur anonyme
12 déc. 2008 à 17:51
Je crois qu'il veut que ça continue tant que l'utilisateur entre un mois correct. C'est pas ça Amin?
0
Mastaking Messages postés 35 Date d'inscription samedi 10 mars 2007 Statut Membre Dernière intervention 5 septembre 2011 14
12 déc. 2008 à 17:56
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));
}
0
amin009 Messages postés 112 Date d'inscription jeudi 2 octobre 2008 Statut Membre Dernière intervention 20 février 2010
12 déc. 2008 à 18:05
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));

}
0
daronmaster Messages postés 326 Date d'inscription vendredi 12 janvier 2007 Statut Membre Dernière intervention 11 mai 2009 44
12 déc. 2008 à 18:15
et alors c'est bon maintenant ? si oui passe en résolu
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
12 déc. 2008 à 18:36
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
0