begin process at 2012 05 28 05:26:45
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Débutant(e)

 > 

affichache d'un document en c


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

affichache d'un document en c

jeudi 18 janvier 2007 à 15:41:24 | affichache d'un document en c

godar8

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 <process.h>


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_s<position;i_s++)
    {
        ptr=ptr->suiv;
    }
        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 (a<position)
    {
        supression=supression->suiv;
        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;
}









jeudi 18 janvier 2007 à 16:41:57 | Re : affichache d'un document en c

vicenzo

Membre Club
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 !


jeudi 18 janvier 2007 à 17:14:04 | Re : affichache d'un document en c

godar8


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 <process.h>


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_s<position;i_s++)
{
ptr=ptr->suiv;
}
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 (a<position)
{
supression=supression->suiv;
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;
};


jeudi 18 janvier 2007 à 17:15:31 | Re : affichache d'un document en c

godar8


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 <process.h>


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_s<position;i_s++)
{
ptr=ptr->suiv;
}
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 (a<position)
{
supression=supression->suiv;
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;
};




Cette discussion est classée dans : int, chaine, printf, document, ptr


Répondre à ce message

Sujets en rapport avec ce message

preobleme de fonction [ par gemini010 ] bonjour ,g commencer a faire un programme me permetant d'enregistrer des client dans un fichier a l'inde d'une fonction et de les consulte en utilisan Separer une chaine en sous chaine [ par firemax ] Bonjour Je me posais une question , j'aimerais diviser une chaine en sous chaine pour pouvoir ensuite les trier par longueur de chaine de caractere Gestion de plusieurs ports RS232 [ par dissezfr ] Bonjour à tous d'abordJ'ai récupéré un code sur le site permettant de géré un port série, j'aimerai piloter 8 (voir +) ports série avec un seul ordina [C] Retour au début du programme [ par thekid06 ] Bonsoir, Je cherche après chaque execution revenir au début du programme. Comment je peut faire s'il vous plaît ? Voilà ma source : [code=cpp]#includ Conversion des minuscules accentuées en minuscules sans accent : impossible ? [ par ungars2 ] Bonjour, voici les messages d'erreurs de GCC pour ce code (c'est juste un exemple) : Line Location main.c:34: warning: multi-character character con lecture d'une chaine au clavier :probléme d'execution! [ par infofst ] Bonjour, je suis en train d'écrire un programme qui fait des opérations sur une date saisie au clavier. la lecture de date est en language assembleu aide pour ajouter 2 nombre au tableau [ par Rido159 ] [size=100][b]Bonjour je suis débutant en C, j ai besoin de votre aide svp [^^mad5] j ai déclarer un tableau , j ai fais l'initialisation mais je suis recherche comment faire fonctionner ce code via une interface graphique (pilotage port //) [ par cedpic ] voici le code que j ai creer qui marche tres bien en mode console mais je souhaiterais les piloter par une interface graphique en remplacent les bouto Sauvegarde de fichier géométrique simple dans un fichier sous xp. [ par DeathRavage ] Bonjour à tous j'ai pour projet de développer un programme permetant le dessin de formes géométriques simples et leur sauvegarde dans un fichier.j'ai scanf d'une structure imbriqée [ par sdiri_med ] Bonsoir, j'ai rencontré beaucoup des problèmes avec les structures je voudrai vous demander comment faire un appel d'une structure dans une autre pou


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,733 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales