Traduire la boucle for en c

Fermé
nassim1987 Messages postés 105 Date d'inscription mercredi 25 novembre 2009 Statut Membre Dernière intervention 27 janvier 2014 - 30 janv. 2011 à 01:40
Hxyp Messages postés 401 Date d'inscription vendredi 28 janvier 2011 Statut Membre Dernière intervention 27 avril 2014 - 30 janv. 2011 à 06:59
Bonjour, si on part de l'instruction suivante: for(i=0;i<10;i++)

écrite dans un fichier que je vais ouvrir en lecture, je voudrais dans un objectif de traduction ultérieur récupéré les informations de cette boucle telle que la valeur initiale de l'indice sa valeur final, le pas ect..
En prenons en considération que par exemple le pas final peut être < à une valeur mais peut être <= ou autre chose si la boucle est en phase descendante.

Pouvez vous m'aider à trouver la manière ou la méthode de lire ce fichier, bien sur cette traduction en langage c doit être valable même en variant les paramètres (pas final,pas)

Merci
A voir également:

1 réponse

Hxyp Messages postés 401 Date d'inscription vendredi 28 janvier 2011 Statut Membre Dernière intervention 27 avril 2014 54
30 janv. 2011 à 06:59
Bonjour,
Vous pouvez utiliser la chaine connue "for" et ensuite le contenu entre les (), puis vous séparez les paramètres grâce aux ; vous aurez alors les 3 chaines :
i=0
i<10
i++
on peut utiliser le nom de la variable et la valeur numérique pour récupérer les symboles ou utiliser les symboles pour récupérer la variable et la valeur numérique, je pense que ce serait plus simple de récupérer les symboles.
Un peu de code pour l'explication :

#include <stdio.h>//printf
#include <string.h>//strlen

void recup_for(const char *a)
{
    char *fro="for", buff[250],bfparam[80];//taille des buff à l'arrache
    unsigned int x=strlen(a),i,y=0,p=0,z=0;
    /*  x=taille de a, i pour la boucle principale
        y pour la chaine fro "for"
        p pour les parenthese, z pour le buff */
    for(i=0;i<x;i++)
    {
        if(a[i]==fro[y]){y++;}//trouve la chaine "for"
        if(y==3)//si la chaine "for" est trouvée
        {
            if(a[i]==')'){//si on arrive à la dernière parenthese )
                p=0;y=0;//reset des () et "for" pour le "for" suivant ansi que pour le premier param utilsant p
                buff[z]='\0';
                //buff contient ce qu'il y a entre les ()
                for(z=0;z<strlen(buff);z++) //parcour du buff recyclage de z
                {
                    if(buff[z]==';')
                    {
                        //si ; alors bfparam contient soit le 1er ou 2e parametre
                        bfparam[p]='\0';//ferme la chaine avec un caractere null
                        printf("%s\n",bfparam);//affichage du parametre
                        p=0;//reset de p pour le parametre suivant
                    }
                    else
                    {
                        bfparam[p]=buff[z]; p++; //charge le param avec recyclage de p
                    }
                }
                bfparam[p]='\0';//ferme chaine pour le 3e parametre
                printf("%s",bfparam);//affichage du dernier parametre
                printf("\n\n");//fin du traitement du "for" actuel
                z=0;//reset de z pour un "for" suivant
            }
            if(p==1)
            {//met le contenu entre les () dans le buff
                buff[z]=a[i]; z++;
            }
            if(a[i]=='('){p=1;}
        }
    }
}

int main()
{
    recup_for("test for(i=0;i<10;i++){} test for(a=15;a>=2;a--){} test");
    return 0;
}


le resultat du code donne :

i=0
i<10
i++

a=15
a>=2
a--

les paramètres sont contenu dans le buff bfparam chacun leur tour à vous de voir comment les utiliser (récupération des variables, symboles et valeurs) et où les stocker par la suite en remplaçant les printf.
0