Affichache d'un document en c

godar8 Messages postés 3 Date d'inscription mercredi 17 janvier 2007 Statut Membre Dernière intervention 18 janvier 2007 - 18 janv. 2007 à 15:41
godar8 Messages postés 3 Date d'inscription mercredi 17 janvier 2007 Statut Membre Dernière intervention 18 janvier 2007 - 18 janv. 2007 à 17:15
j'ai fait un programe  d'editeur de texte en  c  pour cretion document , ajout , supprimer etc

mais j'ai un petit  mon document ne s'affiche  pas pour que je puisse saisr  je ne vois pas d'ou vient l'erreur
alors si il y en a qui peuvent m'aider voici mon programe

#include <math.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include

typedef struct Tligne   //structure liste doublement chainee circulaire
{
    struct Tligne *prec;
    char *ligne;
    struct Tligne *suiv;
}Tligne;

typedef struct tab        //structure tableau de chaine de caractere
{
    int index;
    char chaine[100];
}tab;

//initialisation de index
tab phrase[100];        //declaration du tableau
//phrase[0].index=0;

int numeroligne = 0; //numero de ligne
int nombreligne; //Nombre de ligne

Tligne *document,*deb;

// afficher  le  Menu
int menu()
{
    /*Declaration des variables*/
    int reponse;

    do
    {
        system("cls");
   
   
        printf(" MENU PRINCIPAL\n");
   
        printf("\n");
        printf("1\t\t\tCreer le document\n");   
        printf("2\t\t\tEcrire des paragraphes\n");
        printf("3\t\t\tInsertion d'un paragraphe\n");
        printf("4\t\t\tSuppression d'un paragraphe\n");
        printf("5\t\t\tDeplacement d'un paragraphe\n");       
        printf("6\t\t\tAffichage du document\n");
        printf("7\t\t\tRecherche d'un mot dans le document\n");
        printf("8\t\t\tInsertion d'un fichier dans un autre\n");
        printf("9\t\t\tEnregistrer le document\n");

        printf("10\t\t\tOuvrir le document\n");   
        printf("11\t\t\tQuitter \n\n");
       
        fflush(stdin);
        printf("\t=>");
        scanf("%d",&reponse);
    }while(reponse<0 && reponse>11);
    return reponse;
}

//la création d'un  nouveau document

Tligne* nouveau_document(Tligne *document)
{
    Tligne *nouv=(Tligne*)malloc(sizeof(Tligne));
    deb=nouv;
    nouv->prec=nouv;
    nouv->suiv=nouv;
    nouv->ligne=NULL;
    document=nouv;
    return document;
}

//Ajouter d'un paragraphe
Tligne* ajouter_paragraphe(Tligne *document,char *chaine,int taille,int nbligne)
{   
    Tligne *ptr=document,
    *av=NULL;
    Tligne *nouv=(Tligne*)malloc(sizeof(Tligne));
    printf("\n\tLa ligne a ajouter :%s\n",chaine);

    if (nbligne==0)
    {
        ptr->suiv=nouv;
        nouv->prec=ptr;
        ptr->prec=nouv;
        nouv->suiv=ptr;
        nouv->ligne=chaine;
    }
    else
    {
        av=ptr->prec;
        av->suiv=nouv;
        nouv->prec=av;
        nouv->suiv=ptr;
        ptr->prec=nouv;   
        nouv->ligne=(char*)malloc(4*taille);
        nouv->ligne=chaine;
    }
    printf("\n\n\tnbligne apres vaut :%d\n",numeroligne);   
    return document;
}

//Fonction affiche
void affiche(Tligne *document,int ligne)
{
    /*Declaration de variable*/
    Tligne *ptr=document;
    int i = 1;
    ptr=ptr->suiv;
   
    //Parcour toutes les lignes
    while(i<(ligne+1))
    {
        printf("%d \t %s",phrase[i].index,ptr->ligne);
        ptr=ptr->suiv;
        i++;
    }
    system("pause>NULL");
}

//Insertion d'un ligne
Tligne* insertion(Tligne *document,char *chaine,int position,int nonbreligne, int taille)
{
    /*Declaration de Variables*/
    int i_s;
    int nombreligne;
    Tligne *ptr=document,
    *av=NULL;
    Tligne *nouv=(Tligne*)malloc(sizeof(Tligne));

    while (nombreligne>=position)
    {
        phrase[nombreligne].index=nombreligne;
        nombreligne--;
    }
    for (i_s=0;i_ssuiv;
    }
        av=ptr->prec;
        av->suiv=nouv;
        nouv->prec=av;
        nouv->suiv=ptr;
        ptr->prec=nouv;   
        nouv->ligne=(char*)malloc(4*taille);
        nouv->ligne=chaine;
    return document;
}

//Effacer une ligne
Tligne *efface(Tligne *document, int position)
{
    /*Declaration de variables*/
    Tligne *supression=document,*avant,*apres;
    int a=0;
    while (asuiv;
        a++;
    }
    avant=supression->prec;
    apres=supression->suiv;
    avant->suiv=apres;
    apres->prec=avant;
    free(supression);
    return document;
}

//Deplacer
Tligne *deplace(Tligne *document, int deplace, int inser, int nombreligne)
{
    /*Declaration de variables*/
    Tligne *supression = document;
    int a=0;
    int longueur;
    char *chaine;

    while (a<deplace)
    {
        supression=supression->suiv;
        a++;
    }

    chaine=supression->ligne;
    longueur=strlen(chaine);
    document=efface(document,deplace);
    document=insertion(document,chaine,inser,nombreligne,longueur);
    fflush(stdin);
    return document;
}

//Rechercher un mot dans une ligne
void recherche(char * mot)
{
    /*Declaration des Variables*/
    int i = 0, nombreligne;

    while (i<nombreligne)
    {
            if (strstr(phrase[i].chaine,mot)!=0)
            {
                printf("\ntrouve : %s",phrase[i].chaine);
            }
            i++;
    }

}

//Enregistrement du fichier
void enregistre (char *fichier, Tligne *document, int nombreligne)
{
    /*Declaration de Variable*/
    FILE *stream;
    Tligne *ptr = document;
    int a=0;
   
    if ((stream = fopen(fichier,"w"))==NULL)
    {
        perror("fopen"); //affchage d'un message d'erreur
        exit(-1);
    }
    //flush de l'entree
    fflush(stdin);   
    ptr=ptr->suiv;
    while(a<(nombreligne))
    {
        fprintf(stream,"%s",ptr->ligne);
        ptr=ptr->suiv;
        a++;
    }    
    fclose(stream);
}

//Ouverture du fichier
Tligne *ouvrirdoc(char *fichier,Tligne *docu)
{
    /*Declaration des varariables*/
    int numeroligne;
    int longueur;
    char *chaine;
    FILE *stream1;
    int var;
    numeroligne = 0;
    var = numeroligne;
    chaine = NULL;

    printf("\nvar vaut numeroligne vaut :%d\n",var);
    if ((stream1 = fopen(fichier,"r"))==NULL)
    {
        perror("fopen"); //affchage d'un message d'erreur
        exit(-1);
    }
    //flush de l'entree
    fflush(stdin);   
    fgets(phrase[numeroligne-1].chaine,sizeof(phrase[numeroligne-1].chaine),stream1);
            //printf("\nOk avant feof");
    while (!feof( stream1))
    {
                    //printf("\nOk apres feof\n");
        printf("%s",phrase[numeroligne-1].chaine);
        chaine=phrase[numeroligne-1].chaine;
        longueur=strlen(phrase[numeroligne-1].chaine);
                //printf("\nOk fin feof\n");
                //printf("longueur :%d\n",longueur);
                //printf("chaine :%s\n",chaine);
        docu=ajouter_paragraphe(docu,chaine,longueur,numeroligne);
        numeroligne++;
        fgets(phrase[numeroligne-1].chaine,sizeof(phrase[numeroligne-1].chaine),stream1);
        printf("\nnumligne vaut :%d\n",numeroligne);
    }
    printf("\n\n\tnumligne apres vaut :%d\n",numeroligne);   
    nombreligne=numeroligne;
    printf("\n\n\tnbligne vaut :%d\n",nombreligne);       
    fclose(stream1);
    return document;
}

//Menu principal
int main()
{
    /*Declaration des variables*/
    char nomfic[10];
    int taille;
    int reponse;
    int numero,lignesup,lignedeplace,ligneinser,test,i=0;
    char *ptr;
    int compare;
    char mot[100];

    do
    {
        system("cls");
        reponse = menu();
        switch(reponse)
        {
            case 1:
                document=nouveau_document(document);
                break;
               
            case 2 :  
                do
                {
                    system("cls");
                    printf("Donner le paragraphe : ");
                    fflush(stdin);
                    //gets(phrase[i].chaine);   //sur pc
                    scanf("%s",phrase[i].chaine);
                    compare = strcmp(phrase[i].chaine,"&&&"); //Comparaison paraison d'un chaine de caractère.
                    taille = strlen(phrase[i].chaine); //Longueur de la chaine
                    if (compare==0)
                    {
                        printf("\n\nFin de saisie du texte\n");
                    }
                    else
                    {
                        strcpy(phrase[i].chaine,strcat(phrase[i].chaine,"\n"));
                        ptr = phrase[i].chaine;
                        document=ajouter_paragraphe(document,ptr,taille,nombreligne);
                        i++;
                        phrase[i].index = i;
                        nombreligne++;
                        getchar();
                    }
                }while (compare!=0);
                break;
                   
            case 3 :
                system("cls");
                printf("Donnez la ligne à inserer : ");
                fflush(stdin);
                //gets(phrase[i].chaine);//sur pc

                scanf("\n%s",phrase[i].chaine);
                taille=strlen(phrase[i].chaine);
                printf("donnez le numero de la ligne d'insertion");
                scanf("\n%d",&numero);
                strcpy(phrase[i].chaine,strcat(phrase[i].chaine,"\n"));
                ptr=phrase[i].chaine;           
                printf("\nAvant fontction : %s,%d,%d%d\n",ptr,numero,nombreligne,taille);
                nombreligne++;
                document=insertion(document,ptr,numero,nombreligne,taille);
                getchar();
                break;
           
            case 4:
                system("cls");
                fflush(stdin);
                printf("Donner le numero de la ligne a effacer :\n");
                scanf("%d",&lignesup);
                nombreligne--;
                document=efface(document,lignesup);
                getchar();
                fflush(stdin);
                break;
               
            case 5:
                system("cls");
                fflush(stdin);
                printf("\nDonnez le numero de ligne a deplacer :\n");
                scanf("%d",&lignedeplace);
                fflush(stdin);
                printf("\nDonnez le numero de la ligne d'insertion :\n");
                scanf("%d",&ligneinser);               
                document=deplace(document,lignedeplace,ligneinser,nombreligne);
                getchar();
                fflush(stdin);
                break;               

            case 6 :
                system("cls");
                affiche(document,nombreligne);
                getchar();
                break;
               
            case 7 :
                system("cls");
                printf("\nentrez le mot a rechercher ?\n");
                printf("=> ");
                scanf("%s",mot);
                printf("\n%s\n",mot);
                recherche(mot);
                break;
            case  9:
                system("cls");
                printf("Saisir le nom du document : ");
                scanf("%s",nomfic);
                enregistre(nomfic,document,nombreligne);
                getchar();
                break;
               
            case 10:
                test = nombreligne;
                printf("le nombre de ligne avant l'ouverture : %d",test);
                document=ouvrirdoc("doc.txt",document);
                printf("le nombre de ligne apres l'ouverture : %d",test);
                getchar();
                break;
               
            case 11 :
                printf("vous quittez le programme");
                break;
               
        }
    }while(reponse!=11);
    return 0;
}

3 réponses

cs_vicenzo Messages postés 178 Date d'inscription mardi 16 août 2005 Statut Membre Dernière intervention 25 août 2010 1
18 janv. 2007 à 16:41
Commence d'abord par tester tes pointeurs !!!!!

J'ai testé ton code et je ne compte plus l'accès à des membres d'une strucure via un pointeur null qui ton planter le bazar ! 'ex. : dans le menu, choisir 10 avant avant de choisir 1...).

De plus, ton tableau 'phrase' est déclaré avec une taille de 100. Tu ne vérifie même pas cette valeur quand tu incremente ta variable 'numeroligne' donc tu dépasse du tableau et tu écrase la mémoire qui est à coté.... buffer overflow par la pratique    ....

Morale de l'histoire : En C, toujours tester ses pointeurs et les tailles des tableaux !!!!!!

Vicenzo !
0
godar8 Messages postés 3 Date d'inscription mercredi 17 janvier 2007 Statut Membre Dernière intervention 18 janvier 2007
18 janv. 2007 à 17:14
tout d'obord merci pour votre aide

j'ai modifié le code il est le suivant
mais je n'ai pas bien compris sur le menu 1 et 10 je pensais qu'il fallait crer avant d'ouvrir rep stp

#include <math.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include


typedef struct Tligne //structure liste doublement chainee circulaire
{
char *ligne;
struct Tligne *prec, *suiv;
} Tligne;

Tligne *Do;


typedef struct tab //structure tableau de chaine de caractere
{
int index;
char chaine[100];
}tab;

//initialisation de index
tab phrase[100]; //declaration du tableau

for phrase
index=0;

int numeroligne = 0; //numero de ligne
int nombreligne; //Nombre de ligne

Tligne *document,*deb;

// afficher le Menu
int menu()
{
/*Declaration des variables*/
int reponse;

do
{
system("cls");


printf(" MENU PRINCIPAL\n");

printf("\n");
printf("1\t\t\tCreer le document\n");
printf("2\t\t\tEcrire des paragraphes\n");
printf("3\t\t\tInsertion d'un paragraphe\n");
printf("4\t\t\tSuppression d'un paragraphe\n");
printf("5\t\t\tDeplacement d'un paragraphe\n");
printf("6\t\t\tAffichage du document\n");
printf("7\t\t\tRecherche d'un mot dans le document\n");
printf("8\t\t\tInsertion d'un fichier dans un autre\n");
printf("9\t\t\tEnregistrer le document\n");

printf("10\t\t\tOuvrir le document\n");
printf("11\t\t\tQuitter \n\n");

fflush(stdin);
printf("\t=>");
scanf("%d",&reponse);
}while(reponse<0 && reponse>11);
return reponse;
}

//la création d'un nouveau document

Tligne* nouveau_document(Tligne *document)
{
Tligne *nouv=(Tligne*)malloc(sizeof(Tligne));
deb=nouv;
nouv->prec=nouv;
nouv->suiv=nouv;
nouv->ligne=NULL;
document=nouv;
return document;
}

//Ajouter d'un paragraphe
Tligne* ajouter_paragraphe(Tligne *document,char *chaine,int taille,int nombreligne)
{
Tligne *ptr=document,
*av=NULL;
Tligne *nouv=(Tligne*)malloc(sizeof(Tligne));
printf("\n\tLa ligne a ajouter :%s\n",chaine);

if (nombreligne==0)
{
ptr->suiv=nouv;
nouv->prec=ptr;
ptr->prec=nouv;
nouv->suiv=ptr;
nouv->ligne=chaine;
}
else
{
av=ptr->prec;
av->suiv=nouv;
nouv->prec=av;
nouv->suiv=ptr;
ptr->prec=nouv;
nouv->ligne=(char*)malloc(4*taille);
nouv->ligne=chaine;
}
printf("\n\n\tnbligne apres vaut :%d\n",numeroligne);
return document;
}


//Fonction affiche
void affiche(Tligne *document,int ligne)
{
/*Declaration de variable*/
Tligne *ptr=document;
int i = 1;
ptr=ptr->suiv;

//Parcour toutes les lignes
while(i<(ligne+1))
{
printf("%d \t %s",phrase[i].index,ptr->ligne);
ptr=ptr->suiv;
i++;
}
system("pause>NULL");
}



//Insertion d'un ligne
Tligne* insertion(Tligne *document,char *chaine,int position,int nonbreligne, int taille)
{
/*Declaration de Variables*/
int i_s;
int nombreligne;
Tligne *ptr=document,
*av=NULL;
Tligne *nouv=(Tligne*)malloc(sizeof(Tligne));

while (nombreligne>=position)
{
phrase[nombreligne].index=nombreligne;
nombreligne--;
}
for (i_s=0;i_ssuiv;
}
av=ptr->prec;
av->suiv=nouv;
nouv->prec=av;
nouv->suiv=ptr;
ptr->prec=nouv;
nouv->ligne=(char*)malloc(4*taille);
nouv->ligne=chaine;
return document;
}



//Effacer une ligne
Tligne *efface(Tligne *document, int position)
{
/*Declaration de variables*/
Tligne *supression=document,*avant,*apres;
int a=0;
while (asuiv;
a++;
}
avant=supression->prec;
apres=supression->suiv;
avant->suiv=apres;
apres->prec=avant;
free(supression);
return document;
}


//Deplacer
Tligne *deplace(Tligne *document, int deplace, int inser, int nombreligne)
{
/*Declaration de variables*/
Tligne *supression = document;
int a=0;
int longueur;
char *chaine;

while (a<deplace)
{
supression=supression->suiv;
a++;
}

chaine=supression->ligne;
longueur=strlen(chaine);
document=efface(document,deplace);
document=insertion(document,chaine,inser,nombreligne,longueur);
fflush(stdin);
return document;
}


//Rechercher un mot dans une ligne
void recherche(char * mot)
{
/*Declaration des Variables*/
int i = 0, nombreligne;

while (i<nombreligne)
{
if (strstr(phrase[i].chaine,mot)!=0)
{
printf("\ntrouve : %s",phrase[i].chaine);
}
i++;
}

}


//Enregistrement du fichier
void enregistre (char *fichier, Tligne *document, int nombreligne)
{
/*Declaration de Variable*/
FILE *stream;
Tligne *ptr = document;
int a=0;

if ((stream = fopen(fichier,"w"))==NULL)
{
perror("fopen"); //affchage d'un message d'erreur
exit(-1);
}
//flush de l'entree
fflush(stdin);
ptr=ptr->suiv;
while(a<(nombreligne))
{
fprintf(stream,"%s",ptr->ligne);
ptr=ptr->suiv;
a++;
}
fclose(stream);
}


//Ouverture du fichier
Tligne *ouvrirdoc(char *fichier,Tligne *docu)
{
/*Declaration des varariables*/
int numeroligne;
int longueur;
char *chaine;
FILE *stream1;
int var;
numeroligne = 0;
var = numeroligne;
chaine = NULL;

printf("\nvar vaut numeroligne vaut :%d\n",var);
if ((stream1 = fopen(fichier,"r"))==NULL)
{
perror("fopen"); //affchage d'un message d'erreur
exit(-1);
}
//flush de l'entree
fflush(stdin);
fgets(phrase[numeroligne-1].chaine,sizeof(phrase[numeroligne-1].chaine),stream1);
//printf("\nOk avant feof");
while (!feof( stream1))
{
//printf("\nOk apres feof\n");
printf("%s",phrase[numeroligne-1].chaine);
chaine=phrase[numeroligne-1].chaine;
longueur=strlen(phrase[numeroligne-1].chaine);
//printf("\nOk fin feof\n");
//printf("longueur :%d\n",longueur);
//printf("chaine :%s\n",chaine);
docu=ajouter_paragraphe(docu,chaine,longueur,numeroligne);
numeroligne++;
fgets(phrase[numeroligne-1].chaine,sizeof(phrase[numeroligne-1].chaine),stream1);
printf("\nnumligne vaut :%d\n",numeroligne);
}
printf("\n\n\tnumligne apres vaut :%d\n",numeroligne);
nombreligne=numeroligne;
printf("\n\n\tnbligne vaut :%d\n",nombreligne);
fclose(stream1);
return document;
}


//Menu principal
int main()
{
/*Declaration des variables*/
char nomfic[10];
int taille;
int reponse;
int numero,lignesup,lignedeplace,ligneinser,test,i=0;
char *ptr;
int compare;
char mot[100];

do
{
system("cls");
reponse = menu();
switch(reponse)
{
case 1:
document=nouveau_document(document);
break;

case 2 :
do
{
system("cls");
printf("Donner le paragraphe : ");
fflush(stdin);
//gets(phrase[i].chaine); //sur pc
scanf("%s",phrase[i].chaine);
compare = strcmp(phrase[i].chaine,"&&&"); //Comparaison paraison d'un chaine de caractère.
taille = strlen(phrase[i].chaine); //Longueur de la chaine
if (compare==0)
{
printf("\n\nFin de saisie du texte\n");
}
else
{
strcpy(phrase[i].chaine,strcat(phrase[i].chaine,"\n"));
ptr = phrase[i].chaine;
document=ajouter_paragraphe(document,ptr,taille,nombreligne);
i++;
phrase[i].index = i;
nombreligne++;
getchar();
}
}while (compare!=0);
break;

case 3 :
system("cls");
printf("Donnez la ligne à inserer : ");
fflush(stdin);
//gets(phrase[i].chaine);//sur pc

scanf("\n%s",phrase[i].chaine);
taille=strlen(phrase[i].chaine);
printf("donnez le numero de la ligne d'insertion");
scanf("\n%d",&numero);
strcpy(phrase[i].chaine,strcat(phrase[i].chaine,"\n"));
ptr=phrase[i].chaine;
printf("\nAvant fontction : %s,%d,%d%d\n",ptr,numero,nombreligne,taille);
nombreligne++;
document=insertion(document,ptr,numero,nombreligne,taille);
getchar();
break;

case 4:
system("cls");
fflush(stdin);
printf("Donner le numero de la ligne a effacer :\n");
scanf("%d",&lignesup);
nombreligne--;
document=efface(document,lignesup);
getchar();
fflush(stdin);
break;

case 5:
system("cls");
fflush(stdin);
printf("\nDonnez le numero de ligne a deplacer :\n");
scanf("%d",&lignedeplace);
fflush(stdin);
printf("\nDonnez le numero de la ligne d'insertion :\n");
scanf("%d",&ligneinser);
document=deplace(document,lignedeplace,ligneinser,nombreligne);
getchar();
fflush(stdin);
break;

case 6 :
system("cls");
affiche(document,nombreligne);
getchar();
break;

case 7 :
system("cls");
printf("\nentrez le mot a rechercher ?\n");
printf("=> ");
scanf("%s",mot);
printf("\n%s\n",mot);
recherche(mot);
break;
case 9:
system("cls");
printf("Saisir le nom du document : ");
scanf("%s",nomfic);
enregistre(nomfic,document,nombreligne);
getchar();
break;

case 10:
test = nombreligne;
printf("le nombre de ligne avant l'ouverture : %d",test);
document=ouvrirdoc("doc.txt",document);
printf("le nombre de ligne apres l'ouverture : %d",test);
getchar();
break;

case 11 :
printf("vous quittez le programme");
break;

}
}while(reponse!=11);
return 0;
};
0
godar8 Messages postés 3 Date d'inscription mercredi 17 janvier 2007 Statut Membre Dernière intervention 18 janvier 2007
18 janv. 2007 à 17:15
tout d'obord merci pour votre aide

j'ai modifié le code il est le suivant
mais je n'ai pas bien compris sur le menu 1 et 10 je pensais qu'il fallait crer avant d'ouvrir rep stp

#include <math.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include


typedef struct Tligne //structure liste doublement chainee circulaire
{
char *ligne;
struct Tligne *prec, *suiv;
} Tligne;

Tligne *Do;


typedef struct tab //structure tableau de chaine de caractere
{
int index;
char chaine[100];
}tab;

//initialisation de index
tab phrase[100]; //declaration du tableau

for phrase
index=0;

int numeroligne = 0; //numero de ligne
int nombreligne; //Nombre de ligne

Tligne *document,*deb;

// afficher le Menu
int menu()
{
/*Declaration des variables*/
int reponse;

do
{
system("cls");


printf(" MENU PRINCIPAL\n");

printf("\n");
printf("1\t\t\tCreer le document\n");
printf("2\t\t\tEcrire des paragraphes\n");
printf("3\t\t\tInsertion d'un paragraphe\n");
printf("4\t\t\tSuppression d'un paragraphe\n");
printf("5\t\t\tDeplacement d'un paragraphe\n");
printf("6\t\t\tAffichage du document\n");
printf("7\t\t\tRecherche d'un mot dans le document\n");
printf("8\t\t\tInsertion d'un fichier dans un autre\n");
printf("9\t\t\tEnregistrer le document\n");

printf("10\t\t\tOuvrir le document\n");
printf("11\t\t\tQuitter \n\n");

fflush(stdin);
printf("\t=>");
scanf("%d",&reponse);
}while(reponse<0 && reponse>11);
return reponse;
}

//la création d'un nouveau document

Tligne* nouveau_document(Tligne *document)
{
Tligne *nouv=(Tligne*)malloc(sizeof(Tligne));
deb=nouv;
nouv->prec=nouv;
nouv->suiv=nouv;
nouv->ligne=NULL;
document=nouv;
return document;
}

//Ajouter d'un paragraphe
Tligne* ajouter_paragraphe(Tligne *document,char *chaine,int taille,int nombreligne)
{
Tligne *ptr=document,
*av=NULL;
Tligne *nouv=(Tligne*)malloc(sizeof(Tligne));
printf("\n\tLa ligne a ajouter :%s\n",chaine);

if (nombreligne==0)
{
ptr->suiv=nouv;
nouv->prec=ptr;
ptr->prec=nouv;
nouv->suiv=ptr;
nouv->ligne=chaine;
}
else
{
av=ptr->prec;
av->suiv=nouv;
nouv->prec=av;
nouv->suiv=ptr;
ptr->prec=nouv;
nouv->ligne=(char*)malloc(4*taille);
nouv->ligne=chaine;
}
printf("\n\n\tnbligne apres vaut :%d\n",numeroligne);
return document;
}


//Fonction affiche
void affiche(Tligne *document,int ligne)
{
/*Declaration de variable*/
Tligne *ptr=document;
int i = 1;
ptr=ptr->suiv;

//Parcour toutes les lignes
while(i<(ligne+1))
{
printf("%d \t %s",phrase[i].index,ptr->ligne);
ptr=ptr->suiv;
i++;
}
system("pause>NULL");
}



//Insertion d'un ligne
Tligne* insertion(Tligne *document,char *chaine,int position,int nonbreligne, int taille)
{
/*Declaration de Variables*/
int i_s;
int nombreligne;
Tligne *ptr=document,
*av=NULL;
Tligne *nouv=(Tligne*)malloc(sizeof(Tligne));

while (nombreligne>=position)
{
phrase[nombreligne].index=nombreligne;
nombreligne--;
}
for (i_s=0;i_ssuiv;
}
av=ptr->prec;
av->suiv=nouv;
nouv->prec=av;
nouv->suiv=ptr;
ptr->prec=nouv;
nouv->ligne=(char*)malloc(4*taille);
nouv->ligne=chaine;
return document;
}



//Effacer une ligne
Tligne *efface(Tligne *document, int position)
{
/*Declaration de variables*/
Tligne *supression=document,*avant,*apres;
int a=0;
while (asuiv;
a++;
}
avant=supression->prec;
apres=supression->suiv;
avant->suiv=apres;
apres->prec=avant;
free(supression);
return document;
}


//Deplacer
Tligne *deplace(Tligne *document, int deplace, int inser, int nombreligne)
{
/*Declaration de variables*/
Tligne *supression = document;
int a=0;
int longueur;
char *chaine;

while (a<deplace)
{
supression=supression->suiv;
a++;
}

chaine=supression->ligne;
longueur=strlen(chaine);
document=efface(document,deplace);
document=insertion(document,chaine,inser,nombreligne,longueur);
fflush(stdin);
return document;
}


//Rechercher un mot dans une ligne
void recherche(char * mot)
{
/*Declaration des Variables*/
int i = 0, nombreligne;

while (i<nombreligne)
{
if (strstr(phrase[i].chaine,mot)!=0)
{
printf("\ntrouve : %s",phrase[i].chaine);
}
i++;
}

}


//Enregistrement du fichier
void enregistre (char *fichier, Tligne *document, int nombreligne)
{
/*Declaration de Variable*/
FILE *stream;
Tligne *ptr = document;
int a=0;

if ((stream = fopen(fichier,"w"))==NULL)
{
perror("fopen"); //affchage d'un message d'erreur
exit(-1);
}
//flush de l'entree
fflush(stdin);
ptr=ptr->suiv;
while(a<(nombreligne))
{
fprintf(stream,"%s",ptr->ligne);
ptr=ptr->suiv;
a++;
}
fclose(stream);
}


//Ouverture du fichier
Tligne *ouvrirdoc(char *fichier,Tligne *docu)
{
/*Declaration des varariables*/
int numeroligne;
int longueur;
char *chaine;
FILE *stream1;
int var;
numeroligne = 0;
var = numeroligne;
chaine = NULL;

printf("\nvar vaut numeroligne vaut :%d\n",var);
if ((stream1 = fopen(fichier,"r"))==NULL)
{
perror("fopen"); //affchage d'un message d'erreur
exit(-1);
}
//flush de l'entree
fflush(stdin);
fgets(phrase[numeroligne-1].chaine,sizeof(phrase[numeroligne-1].chaine),stream1);
//printf("\nOk avant feof");
while (!feof( stream1))
{
//printf("\nOk apres feof\n");
printf("%s",phrase[numeroligne-1].chaine);
chaine=phrase[numeroligne-1].chaine;
longueur=strlen(phrase[numeroligne-1].chaine);
//printf("\nOk fin feof\n");
//printf("longueur :%d\n",longueur);
//printf("chaine :%s\n",chaine);
docu=ajouter_paragraphe(docu,chaine,longueur,numeroligne);
numeroligne++;
fgets(phrase[numeroligne-1].chaine,sizeof(phrase[numeroligne-1].chaine),stream1);
printf("\nnumligne vaut :%d\n",numeroligne);
}
printf("\n\n\tnumligne apres vaut :%d\n",numeroligne);
nombreligne=numeroligne;
printf("\n\n\tnbligne vaut :%d\n",nombreligne);
fclose(stream1);
return document;
}


//Menu principal
int main()
{
/*Declaration des variables*/
char nomfic[10];
int taille;
int reponse;
int numero,lignesup,lignedeplace,ligneinser,test,i=0;
char *ptr;
int compare;
char mot[100];

do
{
system("cls");
reponse = menu();
switch(reponse)
{
case 1:
document=nouveau_document(document);
break;

case 2 :
do
{
system("cls");
printf("Donner le paragraphe : ");
fflush(stdin);
//gets(phrase[i].chaine); //sur pc
scanf("%s",phrase[i].chaine);
compare = strcmp(phrase[i].chaine,"&&&"); //Comparaison paraison d'un chaine de caractère.
taille = strlen(phrase[i].chaine); //Longueur de la chaine
if (compare==0)
{
printf("\n\nFin de saisie du texte\n");
}
else
{
strcpy(phrase[i].chaine,strcat(phrase[i].chaine,"\n"));
ptr = phrase[i].chaine;
document=ajouter_paragraphe(document,ptr,taille,nombreligne);
i++;
phrase[i].index = i;
nombreligne++;
getchar();
}
}while (compare!=0);
break;

case 3 :
system("cls");
printf("Donnez la ligne à inserer : ");
fflush(stdin);
//gets(phrase[i].chaine);//sur pc

scanf("\n%s",phrase[i].chaine);
taille=strlen(phrase[i].chaine);
printf("donnez le numero de la ligne d'insertion");
scanf("\n%d",&numero);
strcpy(phrase[i].chaine,strcat(phrase[i].chaine,"\n"));
ptr=phrase[i].chaine;
printf("\nAvant fontction : %s,%d,%d%d\n",ptr,numero,nombreligne,taille);
nombreligne++;
document=insertion(document,ptr,numero,nombreligne,taille);
getchar();
break;

case 4:
system("cls");
fflush(stdin);
printf("Donner le numero de la ligne a effacer :\n");
scanf("%d",&lignesup);
nombreligne--;
document=efface(document,lignesup);
getchar();
fflush(stdin);
break;

case 5:
system("cls");
fflush(stdin);
printf("\nDonnez le numero de ligne a deplacer :\n");
scanf("%d",&lignedeplace);
fflush(stdin);
printf("\nDonnez le numero de la ligne d'insertion :\n");
scanf("%d",&ligneinser);
document=deplace(document,lignedeplace,ligneinser,nombreligne);
getchar();
fflush(stdin);
break;

case 6 :
system("cls");
affiche(document,nombreligne);
getchar();
break;

case 7 :
system("cls");
printf("\nentrez le mot a rechercher ?\n");
printf("=> ");
scanf("%s",mot);
printf("\n%s\n",mot);
recherche(mot);
break;
case 9:
system("cls");
printf("Saisir le nom du document : ");
scanf("%s",nomfic);
enregistre(nomfic,document,nombreligne);
getchar();
break;

case 10:
test = nombreligne;
printf("le nombre de ligne avant l'ouverture : %d",test);
document=ouvrirdoc("doc.txt",document);
printf("le nombre de ligne apres l'ouverture : %d",test);
getchar();
break;

case 11 :
printf("vous quittez le programme");
break;

}
}while(reponse!=11);
return 0;
};
0
Rejoignez-nous