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;
}