Probleme en langage c

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

  • Votes
  • Date
  • Date décroissante
  1. 11 11 case outside of switch
    11 14 expression syntaxe
    30 51 founction call mising
    1. 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?
      1. le probleme c'est switsh tous les autres ereur j'ai pu les coriger svp aisez moi
        1. 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;
          1. 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");
            }
            1. 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!
              1. 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
                1. merci mype!!
                  C'est une sorte de sleep qu'on ne peut pas parametrer alors si je comprend bien.
                  1. 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");
                    }
                    1. 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.
                      1. j'ignore comment on fais ce que tu veux faire
                        moi j'utilise jamais cette fonction car mon compilateur le fait automatiquement ;)
                    2. je pense que au lieu d'utiliser un switch avec un if se serait plus simple ici
                      1. ce ne serai pas une histoire de "&" à placer devant" jour" "mois" "ans"...à la déclaration ou l'apel de la fonction datevalide?
                        1. 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");
                          }