IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Les instructions apres le ELSE ne s'exécutent pas


Sujet :

C

  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2003
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 16
    Points : 6
    Points
    6
    Par défaut Les instructions apres le ELSE ne s'exécutent pas
    Bonjour à tous,

    J'ai écris un prg qui fait un controle sur une chaine de caractère qui doit être du type : (espace)<chaine>(espace)
    Au niveau de mon prg principale, toutes les instructions apres le else de la condition : if (!(espace(mot[rang]))) ne sont pas excuté.

    SVP, aidez moi a trouver une solution !!!!

    Merci d'avance!!!!

    Voici le code ci-dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
     
    #include <stdio.h>
    #include <conio.h>
    #include <ctype.h>
    #include <string.h>
     
     
    //// Fonction espace //////
     
    int espace(char a)
     
    {
    if (a==' ')
       return 1;
    else
       return 0;
    }
     
     
    /////Fonction Element de G ////
     
    int ElementG (char a)
    {
    if (isalpha(a))
       return  1;
    else
       return  0;
    }
     
     
    //// Fonction Element de F ///
     
    int ElementF (char a)
    {
     if ((isalpha)&&(isdigit))
        return 1;
     else
        return 0;
    }
     
    //// Procedure Etat2 ////////
     
    void etat2(char mot[], int L, int rang, int vide, int appG)
     
    {
     while ((rang<=L) && (espace(mot[rang])))
     {
        rang++;
     }
     if (rang>L)
         vide=1;
     else
         vide=0;
     
     if (!vide)
        {
           appG=ElementG(mot[rang]);
        }
     }
     
     ///// Procedure etat3 /////////
     
     void etat3(char mot[], int n, int max, int rang, int longueur, int tropc, int blanc, int sortie, int appF)
     
     {
      while ((rang<=n)&&(longueur<=max)&&(ElementF(mot[rang])))
      {
      rang++;
      longueur++;
      }
     
      if (rang>n)
         sortie=1;
      else
         sortie=0;
     
      if (!sortie)
      {
      if (longueur>max)
         tropc=1;
      else
         tropc=0;
     
      if (espace(mot[rang]))
         blanc=1;
      else
         blanc=0;
     
      appF=ElementF(mot[rang]);
      }
     
     }
     
     /////////// PROGRAMME PRINCIPALE ////////////
     
    void  main ()
     {
     char mot[20]; char motval; char choix;
     int n,rang,longueur, maxi, longmax, sortis, blancs, vide, appG,appF;
     
     do
     {
     //clrscr();
     
     printf ("Entrer le nombre max de caracteres :");
     scanf("%s",maxi);
     
     
     printf("Entrez la chaine :");
     scanf("%s",mot);
     n=strlen(mot);
     rang=1;
     
     if (!(espace(mot[rang])))
      {printf ("1ere lettre doit etre vide : ERR1");  continue; }
       //getch();}
     else
     { rang++;
       vide=0;
       appG=0;
       etat2(mot,n,rang,vide,appG);
      // getch();
       if (vide)
          printf("Mot Vide : ERR2"); //getch();}
       else
           if (!appG)
    	 printf("Pas alphabetique : ERR3"); //getch();}
           else
           {longueur=1;
    	 motval=mot[rang];
    	 rang++;
    	 longmax=0;
    	 blancs=0;
    	 sortis=0;
    	 appF=0;
    	 etat3(mot,n,maxi,rang,longueur,longmax,blancs,sortis,appF);
     
    	 if (sortis)
    	   printf("Mot doit se terminer par espace: ERR4"); //getch();}
    	  else
    	   { if (longmax)
    	       printf ("Vous avez depass‚ la long max : ERR5"); //getch();}
    	     else
    	     {	 if (!blancs)
    		  printf("Caractere non autoris‚ : ERR6"); //getch();}
    		  else
    		  printf("LEXEME OK !!!"); //getch();}
    	      }
    	   }
    	}
      }
    }

  2. #2
    Membre éclairé Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Points : 862
    Points
    862
    Par défaut
    Bien, une première chose à faire estde mettre ton code à l'intérieur des balises dédiées car comme c'est présenté, c'est illisible.

    Sinon sans chercher trop loin, d'après ce que tu dis:
    J'ai écris un prg qui fait un controle sur une chaine de caractère qui doit être du type : (espace)<chaine>(espace)
    et ce que je vois au niveau de l'utilisation de scanf():
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    printf("Entrez la chaine :");
    scanf("%s",mot);
    Je déduis qu'il va y avoir soucis...

    Voici un extrait de Scanf démythifiée que je te conseille de lire si tu veux poursuivre avec l'utilisation de cette fonction:
    Par défaut, scanf supprime les espaces précédant ce qui peut convenir au formateur. Mais dans le cas du '%c', elle ne le fait pas, ce qui fait que les espaces peuvent "compter réellement" lorsque l'on a précisé une taille de saisie par exemple...
    Mais je te conseillerais de plutot utiliser la fonction fgets() qui sera moins source d'erreur et conviendra mieux pour une saisie non formatée.

  3. #3
    Membre expérimenté Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Points : 1 572
    Points
    1 572
    Par défaut
    bonjour,

    1*/ si le else ne se fait pas c'est que la condition est toujours vrai, apres pourquoi ?
    2*/ fait des tests explicite avec == et !=, les ! sont a bannir, je suis pas sur que tu sais vraiment le test que tu essaye de faire.
    3*/ pourrais tu la prochaine fois encapsuler ton code dans la balise code (le # en haut) c'est plus lisible
    4*/ conio.h c'est pas du C++ ca ?

  4. #4
    Membre éprouvé Avatar de orfix
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 707
    Points : 1 132
    Points
    1 132
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <...>
    if ((isalpha)&&(isdigit))
    <...>
    int <...> maxi <...>
    <...>
    scanf("%s",maxi);
    <...>
    Tu as aussi un problème d'accolades ! un 'do{' sans ' }while( ... ); ' correspondant c'est louche ...

    Bon courage

  5. #5
    Futur Membre du Club
    Inscrit en
    Juin 2003
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    slt, désolé pour le code illisible. j'utiliserai une balise la prochaine fois.
    je suis un débutant en C (jai ecris en pascal le meme prg, il marche bien).
    je vais essayé d'utiliser la fonction fgets.

    Merci

  6. #6
    Futur Membre du Club
    Inscrit en
    Juin 2003
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    slt,

    j'ai essayé avec scanf("%c",) et fgets(), mais sans succès !!!

    que dois - je faire?

    Please help me !!!!!

  7. #7
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    As-tu résolu le problème souligné par ssmario2 de ce do sans while dans main (qui devrait renvoyer int et pas void) ?
    Si oui, quel est le code actuel ?


    Simplifie ton code qui est parfois trop verbeux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int espace(char a)
    {
       return a == ' ';
    }
    int ElementG (char a)
    {
       return isalpha(a)
    }
    .....
    Erreur dans ce code : isalpha et isdigit appliqué à qui ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int ElementF (char a)
    {
     if ((isalpha)&&(isdigit))
        return 1;
     else
        return 0;
    }
    ....

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/06/2015, 17h41
  2. Pas d'exécution des instructions après boucle
    Par dubitoph dans le forum VBScript
    Réponses: 1
    Dernier message: 02/09/2013, 17h31
  3. Réponses: 7
    Dernier message: 12/06/2012, 14h18
  4. [EJB] Les méthodes des ejb stateless ne s'exécutent pas
    Par methodman225 dans le forum Java EE
    Réponses: 3
    Dernier message: 04/08/2010, 11h52
  5. Réponses: 1
    Dernier message: 25/05/2007, 17h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo