Besoin d'aide sur un programme en C éxécutable mais qui se bloque au début " rec

nirvanitta Messages postés 1 Date d'inscription dimanche 11 avril 2010 Statut Membre Dernière intervention 11 avril 2010 - 11 avril 2010 à 18:59
fregolo52 Messages postés 1114 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 6 mai 2021 - 12 avril 2010 à 08:47
salut tous le monde
Mon programme consiste a ouvrir un fichier et chercher tous les palindromes et les afficher avec leurs numéros de lignes et leurs récurrence
Il est exécutable mais il se bloque dans l'ouverture du fichier
Si vous pouvez m'aider a corriger tous les erreurs
merci d'avance .



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


void Creer(FILE *fp)
{


char f[30];
printf("fichier: /n");
scanf("%s",f);
fp=fopen(f,"r") ;

if (fp==NULL )
{printf("probleme ouverture!!!"); }
}

int Palindrome (char *ch)
{
int I,J; /* indices courants */
int p; /* indicateur logique: vrai si CH est un palindrome */


/* Contrôler si CH est un palindrome */
p=1;
for (I=0,J=strlen(ch) ; p && I<J ; I++,J--)
if (ch[I] != ch[J])
p=0;
return p;
}


int main()
{
FILE *fp;
char *s;char *ch;
int L,n,i,p;
Creer(fp) ;
n=1;
while (fgets(s,100,fp))
{
for(i=1;i<=strlen(s);i++)
{
if (s[i]==' ')
{
ch=strncpy (s,ch,i-n);
n=i;
}

p=Palindrome(ch);
/* Affichage du résultat */
if(p)
{
printf("La chaîne %s est un palindrome. elle es dans la ligne %d",ch, L);
}

else
{
printf("La chaîne %s n'est pas un palindrome.", ch);
}
}

}
close(fp);
return(0);}

1 réponse

fregolo52 Messages postés 1114 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 6 mai 2021 4
12 avril 2010 à 08:47
salut

tout ce code doit etre dans le if, vu que ton if détermine si tu as un mot
p=Palindrome(ch);
/* Affichage du résultat */
if(p)
{
printf("La chaîne %s est un palindrome. elle es dans la ligne %d",ch, L);
}

else
{
printf("La chaîne %s n'est pas un palindrome.", ch);
}
} 


puis tu as inversé les paraètres de strncpy :
ch=strncpy (ch,s,i-n); 
ca ne marche plus pour le 2e mot donc tu devrais faire :
ch=strncpy (ch,&s[n],i-n); 

s[n] ou s[n-1] (a voir)
0
Rejoignez-nous