Probleme en langage c

chungech -  
Carri€ Messages postés 41 Statut Membre -
Bonjour,
jai pas compri poukoi la compilation plante en langage c

#include <stdio.h>
#include <stdlib.h>

int datevalide(int jour,int moi,int an){
int njmax;
if (an>0) {
if (moi<12){
switch (moi)
case 1:3:5:7:8:10:11:{njmax=31;break;}
case 4:6:9:12:{njmax=30;break;}
case 2:{
if (an%4==0) njmax=28;
else njmax=29;
break;
}
else return 0;}
else return 0}
if (jour<njmax) return 1;
else return 0;
}
void main(){
int jour, moi,ans;
do
{
printf("entrez jour moi ans");
sacnf("%d%d%d",&jour,&moi,&ans);
}
while (datevalide(jour,moi,ans)==1);
puts("votre date est valide elle est %d,%d,%d",jour,moi,ans);
system("pause");
}
Configuration: Windows XP
Firefox 2.0.0.9

16 réponses

  1. mype Messages postés 2459 Date d'inscription   Statut Membre Dernière intervention   437
     
    quel est le message d'erreur du compilateur et a quel ligne ?
    0
  2. chungech Messages postés 7 Date d'inscription   Statut Membre
     
    11 11 case outside of switch
    11 14 expression syntaxe
    30 51 founction call mising
    0
  3. Carri€ Messages postés 41 Statut Membre 29
     
    salut!
    y'a un sacnf au lieu de scanf ( mais c'est peut être une erreur de frappe si il n'y a pas eu de copier/coller)

    et je n'aurai pas mis de ";" après la parenthèse ")" du while. Mais donne nous le mesage d'erreur car c'est peut être encore autre chose.

    Sinon j'en profite pour demander également autre chose à propos de la commande system(" ") que tu utilises. "pause", ca sert vraiment à faire une pause dans le programme? du genre un sleep?
    0
  4. chungech Messages postés 7 Date d'inscription   Statut Membre
     
    le probleme c'est switsh tous les autres ereur j'ai pu les coriger svp aisez moi
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Carri€ Messages postés 41 Statut Membre 29
     
    ok alors...case outside of switch.....j'ai pas mes programmes sous les yeux pour verifier la syntaxe exact mais c'est
    switch (..)
    { case:1:.....;
    case:2:....;
    }
    il te manques des {} qui étaient mal positionné case 1:3:5:7:8:10:11:{njmax=31;break;} devient case 1:3:5:7:8:10:11:njmax=31;break;
    0
  7. chungech Messages postés 7 Date d'inscription   Statut Membre
     
    merci
    mais lors de l'execution le programme donne toujour une date fause maime si elle est vrai

    #include <stdio.h>
    #include <stdlib.h>

    int datevalide(int jour,int moi,int an){
    int njmax;
    if (an>0) {
    if (moi<=12){
    switch (moi){
    case 1,3,5,7,8,10,11:{njmax=31;break;}
    case 4,6,9,12:{njmax=30;break;}
    case 2:{
    if (an%4==0) njmax=28;
    else njmax=29;
    break;
    }
    }
    } else return 0;
    }else return 0;
    if (jour<njmax) return 1;
    else return 0;
    }
    void main(){
    int JOUR, MOI,ANS;

    printf("entrez jour moi ans");
    scanf("%d%d%d",&JOUR,&MOI,&ANS);
    if (datevalide(JOUR,MOI,ANS)==0)puts("faux");
    else puts("vrai");

    system("pause");
    }
    0
  8. Carri€ Messages postés 41 Statut Membre 29
     
    avant de partir tu voudrai pas me raconter pour le "system("pause"); ??? et n'oublie pas de marquer le problème comme résolu. ;o)
    sinon, bonne nuitée!
    0
  9. mype Messages postés 2459 Date d'inscription   Statut Membre Dernière intervention   437
     
    system("pause") c'est pour metre le programme en pause pour qu'on est le tps de voir ce qui se passe sinon le terminale s'ouvre et se ferme presque immediatement
    0
  10. Carri€ Messages postés 41 Statut Membre 29
     
    merci mype!!
    C'est une sorte de sleep qu'on ne peut pas parametrer alors si je comprend bien.
    0
  11. mype Messages postés 2459 Date d'inscription   Statut Membre Dernière intervention   437
     
    on peut dire ça comme ça...
    un sleep a l'infini
    0
  12. chungech Messages postés 7 Date d'inscription   Statut Membre
     
    merci
    mais lors de l'execution le programme donne toujour une date fause maime si elle est vrai
    je suis un etudiant a l'ecole superieur des sciences et techniques de tunis chaque semaine on fait un tp c'est le tp de cette semaine
    une fonction qui permet de retourner 1 si date valide 0 si date invalide pour system("pause") cest notre prof qui nous a dit de l'etuliser
    normalement il est un docteur en programation
    #include <stdio.h>
    #include <stdlib.h>

    int datevalide(int jour,int moi,int an){
    int njmax;
    if (an>0) {
    if (moi<=12){
    switch (moi){
    case 1,3,5,7,8,10,11:{njmax=31;break;}
    case 4,6,9,12:{njmax=30;break;}
    case 2:{
    if (an%4==0) njmax=28;
    else njmax=29;
    break;
    }
    }
    } else return 0;
    }else return 0;
    if (jour<njmax) return 1;
    else return 0;
    }
    void main(){
    int JOUR, MOI,ANS;

    printf("entrez jour moi ans");
    scanf("%d%d%d",&JOUR,&MOI,&ANS);
    if (datevalide(JOUR,MOI,ANS)==0)puts("faux");
    else puts("vrai");

    system("pause");
    }
    0
  13. Carri€ Messages postés 41 Statut Membre 29
     
    a ce moment là, y'aurai pas une commande pour annuler "pasue" et reprendre ?
    ....euh..je crois que je viens de dire une bétise. On ne peut pas reprendre puique le programme va rester en pause....c'est un peu tard pour moi.
    En faite, je cherche à mettre un programme en "pause" avec tous ses processus fils et je ne sais pas trop comment je vais faire.....j'ouvrirai un nouveau message a l'occasion ou si t'as la réponse, on voit en privé car ce n'est pas le sujet original.
    0
    1. mype Messages postés 2459 Date d'inscription   Statut Membre Dernière intervention   437
       
      j'ignore comment on fais ce que tu veux faire
      moi j'utilise jamais cette fonction car mon compilateur le fait automatiquement ;)
      0
  14. mype Messages postés 2459 Date d'inscription   Statut Membre Dernière intervention   437
     
    je pense que au lieu d'utiliser un switch avec un if se serait plus simple ici
    0
  15. Carri€ Messages postés 41 Statut Membre 29
     
    ce ne serai pas une histoire de "&" à placer devant" jour" "mois" "ans"...à la déclaration ou l'apel de la fonction datevalide?
    0
  16. mype Messages postés 2459 Date d'inscription   Statut Membre Dernière intervention   437
     
    essaye ça sauf si tu tiens vraiment a ton switch ;)

    #include <stdio.h>
    #include <stdlib.h>
    
    
    int datevalide(int jour,int moi,int an){
        int njmax;
    
        if (an>0) {
            if (moi<=12){
                if(moi== 1 || moi ==3) njmax=31;
                if(moi== 5 || moi ==7) njmax=31;
                if(moi == 8 || moi >= 10) njmax=31;
                if(moi == 4 || moi ==6 ) njmax=30;
                if(moi == 9 || moi ==12) njmax=30;
                if(moi==2){
            if (an%4==0) njmax=28;
                else njmax=29;}
            }
        else return 0;
        }
    else return 0;
    if (jour<njmax) return 1;
        else return 0;
    }
    
    void main(){
    int JOUR, MOI,ANS;
    
    printf("entrez jour moi ans :");
    scanf("%d%d%d",&JOUR,&MOI,&ANS);
    if (datevalide(JOUR,MOI,ANS)==0)puts("faux");
    else puts("vrai");
    
    system("pause");
    }
    
    0
  17. Carri€ Messages postés 41 Statut Membre 29
     
    Bonjour!
    Je pense que mype a convaincu avec sa solution ;o)
    0