Besoin d'aide, problème avec une boucle en analyse lexicale

Fermé
ilyesilou Messages postés 1 Date d'inscription mardi 8 novembre 2016 Statut Membre Dernière intervention 8 novembre 2016 - Modifié par crapoulou le 8/11/2016 à 23:36
Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 - 9 nov. 2016 à 22:04
Bonjour tout le monde, voici le code (c'est l'analyse lexical d'un langage qui contiens 4 caractère (a,b,c,d) )

#include<stdio.h>
#include<string>
#include<string.h>
#include<iostream>
 using namespace std;
 
int main (void) {

     string a;
     cout << "entrer le mot: ";
     cin>>(a);
     int i=0;
     bool t=true;
     
    
        while ( (t=true) && (i<a.size()) ) {
         
         if ( a[i] == 'a' )  
          {
                     t=true;
                     i++;
                     getchar();
                     
                     } else { 
                              if (a[i]=='b'){
                                       t=true;
                                      i++;
                                      getchar();
                                        }  else {
                                                        if (a[i]=='c'){
                                                        t=true;
                                                        i++;
                                                        getchar();
                                                         } else {
                                                                        if (a[i]='d'){
                                                                         t=true;
                                                                         i++;
                                                                         getchar();
                                                                                } else{
                                                                                          t=false;
                                                                                          i= a.size();
                                                                                          getchar();
                                                                                             }
                                                                }
                                                        }
                                                     }
                          }
                  if (t=true) {
                                 cout<< "lexicale est juste";
                               } else { 
                                        cout<< "lexicale est faux";
                                           }
                  getchar();
                
      }


je ne sais pas pourquoi sa ne marche pas, aidez moi svp

EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.


2 réponses

Utilisateur anonyme
9 nov. 2016 à 06:39
Ton code peut être simplifié pour être plus lisible :

#include <stdio.h>
#include <string.h>

char allowed[4] = "abcd" ;

int in_array( char c ){

    int i = 0;
    for( i = 0; i < 4 ; i++ ){
        if(allowed[i] == c) return 1;
    }
    return 0;

}

int main(void){

    char *mot1 = "abddbdbdccd" ;
    int i;
    for( i = 0; (i < strlen(mot1)) && (in_array(mot1[i]));i++);
    if(i<strlen(mot1)) printf("FAUX");
    if(i==strlen(mot1)) printf("OK");

}
0
Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
9 nov. 2016 à 22:04
Bonjour,

A deux reprises tu crois tester 't' en faisant if ( t=true ), le compilateur a certainement indiqué un warning indiquant ton erreur.
0