[C] Changer un mot
Bonjour,
J'ai créer un programme en C permettant de changer un mot en un autre dans un fichier fichier.txt (dejà créé) dans lequel les mots sont ecrit les uns en dessous des autres :
#include <stdio.h>
main()
{
FILE *fic;
char nouveaunom[20], nom[20], mot[20];
int compteur=0;
fic=fopen("fichier.txt","r+");
if(fic==NULL)
puts("Erreur ouverture du fichier");
else
{
printf("Donner le nouveau nom : ");
scanf("%s", &nouveaunom);
do
{
printf("\nDonner le nom a changer : ");
scanf("%s", &nom);
while(fscanf(fic,"%s", &mot) && !feof(fic)) //On parcourt le fichier fichier.txt
{
if(strcasecmp(mot,nom)==0)
{
fprintf(fic,"%s", nouveaunom);
compteur=1;
}
}
if(compteur==0)
printf("\nMot a remplacer non trouve !\n");
}
while(compteur==0);
}
fclose(fic);
printf("\n");
system("pause");
}
Cela ne fonctionne pas. Pourquoi svp ? merci d'avance !
J'ai créer un programme en C permettant de changer un mot en un autre dans un fichier fichier.txt (dejà créé) dans lequel les mots sont ecrit les uns en dessous des autres :
#include <stdio.h>
main()
{
FILE *fic;
char nouveaunom[20], nom[20], mot[20];
int compteur=0;
fic=fopen("fichier.txt","r+");
if(fic==NULL)
puts("Erreur ouverture du fichier");
else
{
printf("Donner le nouveau nom : ");
scanf("%s", &nouveaunom);
do
{
printf("\nDonner le nom a changer : ");
scanf("%s", &nom);
while(fscanf(fic,"%s", &mot) && !feof(fic)) //On parcourt le fichier fichier.txt
{
if(strcasecmp(mot,nom)==0)
{
fprintf(fic,"%s", nouveaunom);
compteur=1;
}
}
if(compteur==0)
printf("\nMot a remplacer non trouve !\n");
}
while(compteur==0);
}
fclose(fic);
printf("\n");
system("pause");
}
Cela ne fonctionne pas. Pourquoi svp ? merci d'avance !
A voir également:
- [C] Changer un mot
- Changer dns - Guide
- Trousseau mot de passe iphone - Guide
- Mot de passe - Guide
- Changer mot de passe administrateur windows 10 - Guide
- Changer carte graphique - Guide
1 réponse
Pour commencer le main doit retourner un int (0 si tout va bien, un code d'erreur sinon).
Si un mot fait plus de 20 caractères le programme plantera.
Ensuite remplace "system("pause"); " par "getchar()"
Inclue le <strings.h> (pour la fonction strcasecmp).
Pour la démarche j'émets des doutes sur le fait de modifier un fichier en cours de lecture (notamment si le mot de remplacement est plus court que le mot de départ). Je pense que tu ferais mieux d'écrire dans un autre fichier car sinon ton FILE * risque de ne plus pointer où il faut.
Personnellement voici comment je coderais ton programme (en pseudo code pour que tu puisses t'entraîner)
Si le but c'est de remplacer des occurrences dans un fichier texte il est plus adéquat d'utiliser un outil comme sed que d'écrire un programme C (mais je suppose que c'est un exercice).
Bonne chance
Si un mot fait plus de 20 caractères le programme plantera.
Ensuite remplace "system("pause"); " par "getchar()"
Inclue le <strings.h> (pour la fonction strcasecmp).
Pour la démarche j'émets des doutes sur le fait de modifier un fichier en cours de lecture (notamment si le mot de remplacement est plus court que le mot de départ). Je pense que tu ferais mieux d'écrire dans un autre fichier car sinon ton FILE * risque de ne plus pointer où il faut.
Personnellement voici comment je coderais ton programme (en pseudo code pour que tu puisses t'entraîner)
1) ouvrir le fichier en lecture (fin) et ouvrir le fichier résultat en écriture (fout). Si l'un des fichiers ne peut être ouvert, quitter en renvoyant un message d'erreur. 2) lire fin ligne par ligne (avec getline) 2a) stocker la ligne dans un tampon (variable buffer). 2b) initialiser i = 0, n = strlen(buffer) 2c) Tant que i < n 2c1) Chercher le mot à remplacer strcasestr à partir de la position i, et stocker cette position dans j 2c2) si mot trouvé 2c2a) écrire ce qui est entre buffer[i] et buffer[j] dans fout 2c2b) écrire dans fout le mot de remplacement 2c2c) i = j+1 2c3) sinon, écrire ce qui est entre i et n 2d) Fin tant que 3) Fin pour 4) Fermer les fichiers, quitter
Si le but c'est de remplacer des occurrences dans un fichier texte il est plus adéquat d'utiliser un outil comme sed que d'écrire un programme C (mais je suppose que c'est un exercice).
Bonne chance