Problème de programme en C

Fermé
cyrinix - 1 juin 2008 à 22:49
mype Messages postés 2435 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 - 2 juin 2008 à 00:46
#include <stdio.h>
#include <stdlib.h>
Merci à tous les developpeurs qui m'ont aidé .
Donc voilà ce que j'ai réalisé comme travail: le but est d'extraire les mots des differentes lignes d'un fichier texte, mais le probleme c'est que le programme n'affiche que les mots de la derniere ligne.
J'ai refléchi trop sur ce point surtout sur la foonction d'extraction des mots mais j'ai pas réussi à localiser le probleme.
Voila mon bout de code espérant que vous allez me trouvez une soultion :

#include<string.h>
#define TAILLEMAX 1000 //tableau de taille 1000

int main(int argc, char *argv[])
{
FILE* fichier =NULL;
char chaine [TAILLEMAX ]=" "; // chaine vide de taille TAILLEMAX
fichier =fopen("test.txt","r");
if (fichier !=NULL)
{
while(fgets(chaine, TAILLEMAX , fichier)!=NULL;
} //on lit maximum TAILLEMAX caractere du fichier , on stoke le tout dans "chaine"


printf("%s", chaine); //on affiche la chaine
}
fclose (fichier);
return0;
}

void Affiche_mot (char* s)
{
if(s!=NULL)
{
int length=strlen(s);
int i =0;
while(i<length)
{
if(s[i]!= ' ' &&s[i]!='\n')
{
printf("%c", s[i]);
]
else
printf("\n");
i++;
}
}
}MErci

1 réponse

mype Messages postés 2435 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 436
2 juin 2008 à 00:46
le probleme c'est que le fgets() s'arrete de lire des qu'il trouve un \n ça veut dire que tu lis la premiere ligne de ton fichier tu la stocke dans chaine ensuite tu lis la deuxieme tu la stocke a nouveau dans chaine ce qui fais que la premiere ligne sera effacé etc... donc a la fin tu as dans chaine que la derniere ligne du fichier
tu devrais plutot essayé de lire caractere par caractere
essaye ça
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define TAILLEMAX 1000 //tableau de taille 1000

int main(int argc, char *argv[])
{
FILE *fichier =NULL;
char chaine [TAILLEMAX ]=" "; // chaine vide de taille TAILLEMAX
int i;char c;
fichier =fopen("test.txt","r");
i=0;
if (fichier !=NULL)
{
while(c!= EOF){
c=fgetc(fichier);
chaine[i]=c;
i++;}
} 
chaine[i-1]='\0';

printf("%s", chaine); //on affiche la chaine

fclose(fichier);
return 0;
}

void Affiche_mot (char* s)
{
if(s!=NULL)
{
int length=strlen(s);
int i =0;
while(i<length)
{
if(s[i]!= ' ' &&s[i]!='\n')
{
printf("%c", s[i]);
}
else
printf("\n");
i++;
}
}
}
0