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   -
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   Statut Membre Dernière intervention   44
 
bonjour,

et que se passe-t-il au juste ?
0
Utilisateur anonyme
 
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   Statut Membre Dernière intervention   44
 
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   Statut Membre Dernière intervention  
 
Oulala oui honte à moi je devrais aller me coucher lol
0
amin009 Messages postés 112 Date d'inscription   Statut Membre Dernière intervention  
 
est ce que mon condition d'arrêt est juste dans mon boucle?
0
daronmaster Messages postés 326 Date d'inscription   Statut Membre Dernière intervention   44
 
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   Statut Membre Dernière intervention   44
 
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
 
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   Statut Membre Dernière intervention  
 
mon problème c'est que la boucle while n'exécute plus?
0
Utilisateur anonyme
 
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   Statut Membre Dernière intervention   44 > Utilisateur anonyme
 
j'ai fait la même ... lol
0
daronmaster Messages postés 326 Date d'inscription   Statut Membre Dernière intervention   44
 
tu n'as meme pas ton printf qui marche ?
0
amin009 Messages postés 112 Date d'inscription   Statut Membre Dernière intervention  
 
jeveux que le traitement n'execute plus sauf pour les valeurs entre 1 et 12?
0
daronmaster Messages postés 326 Date d'inscription   Statut Membre Dernière intervention   44
 
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
 
hé hé les grands esprits se rencontrent on a été assez synchro sur ce coup
0
Mastaking Messages postés 35 Date d'inscription   Statut Membre Dernière intervention   14
 
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
 
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   Statut Membre Dernière intervention   14
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   44
 
et alors c'est bon maintenant ? si oui passe en résolu
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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