Remplacer espace en retour à la ligne C
ahemd
-
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Salut.
Je veux remplacer les espaces dans mon fichier en retour à la ligne j'ai fait cette manipulation
Le probléme c'est que ça ne marche pas
Salut.
Je veux remplacer les espaces dans mon fichier en retour à la ligne j'ai fait cette manipulation
#include<stdlib.h> #include<stdio.h> #include<string.h> void sauvegarde(char *chaine[], int taille, char nomfichier[50]) { FILE* fichier; int i; char *position; printf("Indiquez un nom du fichier\t"); fgets(nomfichier, 50,stdin); fichier = fopen(nomfichier,"w"); if(fichier!=NULL) { printf("Veuillez saisir le contenu \t"); fgets(chaine,taille,stdin); fprintf(fichier,"%s",chaine); fclose(fichier); } fichier = fopen(nomfichier,"r+"); if(fichier!=NULL) { if(fgets(chaine,taille,stdin)!=NULL) { position=strchr(chaine,'\0'); if(position!=NULL) { *position='\n'; } return 1; } fclose(fichier); } } int main() { char chaine[100],nomfichier[50]; sauvegarde(chaine,100,nomfichier); }
Le probléme c'est que ça ne marche pas
A voir également:
- Remplacer espace en retour à la ligne C
- Espace insécable - Guide
- Partager photos en ligne - Guide
- Retour à la ligne excel formule - Guide
- Espace de stockage gmail plein - Guide
- Mètre en ligne - Guide
3 réponses
déja tu ne cherches pas espace mais fin de chaine
position=strchr(chaine,'\0');
à remplacer par
position=strchr(chaine,' ');
après l'algo je n'est pas vérifié
position=strchr(chaine,'\0');
à remplacer par
position=strchr(chaine,' ');
après l'algo je n'est pas vérifié
J'ai pas tout lu, mais ya pas mal de fautes.
Tu mets dans le prototype de ta fonction sauvegarder :
char *chaine[]
Alors que chaine est définie en : char chaine[100];
fgets(nomfichier, 50,stdin);
fichier = fopen(nomfichier,"w");
Attention, fgets te stockera le retour chariot '\n' à la fin de la chaîne s'il a la place. Donc ton nom de fichier sera bizarre. Il faut donc remplacer le '\n' par '\0' (tu peux t'aider de strchr).
position=strchr(chaine,'\0');
Si tu fais ça, tu vas rechercher le caractère terminal. Cela renverra NULL;
Toi ce que tu souhaites, c'est rechercher les espaces dont le code ascii est ' '. Après, à toi de voir si tu veux tous les remplacer ou pas. Dans ce cas, il faudra réaliser une boucle while.
Tu mets dans le prototype de ta fonction sauvegarder :
char *chaine[]
Alors que chaine est définie en : char chaine[100];
fgets(nomfichier, 50,stdin);
fichier = fopen(nomfichier,"w");
Attention, fgets te stockera le retour chariot '\n' à la fin de la chaîne s'il a la place. Donc ton nom de fichier sera bizarre. Il faut donc remplacer le '\n' par '\0' (tu peux t'aider de strchr).
position=strchr(chaine,'\0');
Si tu fais ça, tu vas rechercher le caractère terminal. Cela renverra NULL;
Toi ce que tu souhaites, c'est rechercher les espaces dont le code ascii est ' '. Après, à toi de voir si tu veux tous les remplacer ou pas. Dans ce cas, il faudra réaliser une boucle while.
Salut,
tu as vérifié tes warnings de compilation ? Avec gcc, j'ai ça :
Pour les 3 premiers, il suffit de retirer soit [] soit * à ton paramètre chaine. Pour le return, je pense que c'est une inattention de ta part, sa place est bien sûr dans le main. Le dernier part une fois que tu as corrigé le paramètre chaine.
Perso j'ai eu un problème avec tes fgets qui utilisent stdin, il y avait un saut de ligne qui s'incrustait. Un dump de ce genre :
m'affichait des trucs comme :
Tu vois le genre. Je te conseille d'utiliser simplement gets, au moins pour le nom de fichier.
Au niveau de ton second fopen, je ne comprends pas du tout ce que tu cherches à faire :/ On dirait que tu oublies d'inscrire des choses dans le fichier... Tu récupères juste une chaîne depuis stdin, tu la modifies mais tu n'en fais rien ensuite.
En fait j'ai juste l'impression que tu as codé trop vite, ou alors que tu étais fatigué ^^
tu as vérifié tes warnings de compilation ? Avec gcc, j'ai ça :
.\newline.c: In function 'sauvegarde': .\newline.c:15: warning: passing arg 1 of 'fgets' from incompatible pointer type .\newline.c:22: warning: passing arg 1 of 'fgets' from incompatible pointer type .\newline.c:24: warning: passing arg 1 of 'strchr' from incompatible pointe r type .\newline.c:29: warning: 'return' with a value, in function returning void .\newline.c: In function 'main': .\newline.c:37: warning: passing arg 1 of 'sauvegarde' from incompatible po inter type
Pour les 3 premiers, il suffit de retirer soit [] soit * à ton paramètre chaine. Pour le return, je pense que c'est une inattention de ta part, sa place est bien sûr dans le main. Le dernier part une fois que tu as corrigé le paramètre chaine.
Perso j'ai eu un problème avec tes fgets qui utilisent stdin, il y avait un saut de ligne qui s'incrustait. Un dump de ce genre :
printf("[%s]\n", nomfichier);
m'affichait des trucs comme :
[test ]
Tu vois le genre. Je te conseille d'utiliser simplement gets, au moins pour le nom de fichier.
Au niveau de ton second fopen, je ne comprends pas du tout ce que tu cherches à faire :/ On dirait que tu oublies d'inscrire des choses dans le fichier... Tu récupères juste une chaîne depuis stdin, tu la modifies mais tu n'en fais rien ensuite.
En fait j'ai juste l'impression que tu as codé trop vite, ou alors que tu étais fatigué ^^
Tu vois le genre. Je te conseille d'utiliser simplement gets, au moins pour le nom de fichier.
Mauvais conseil ^^. Non seulement, tu n'indiques pas la taille (fonction à éviter) et en plus le '\n' vient également se stocker. Lorsqu'on utilise fgets, il suffit de remplacer le '\n' au moyen de strchr. Ou alors, on peut utiliser scanf("%49s",nomfichier); comme ça pas besoin de retirer le '\n'.
Cdlt,
Mauvais conseil ^^. Non seulement, tu n'indiques pas la taille (fonction à éviter) et en plus le '\n' vient également se stocker. Lorsqu'on utilise fgets, il suffit de remplacer le '\n' au moyen de strchr. Ou alors, on peut utiliser scanf("%49s",nomfichier); comme ça pas besoin de retirer le '\n'.
Cdlt,
arce que j'ai mis 50 et j'ai quand même pas de saut de ligne
Normal, le format "%s" ne prend pas le retour chariot.
Tu peux expliquer du coup l'histoire du -1 ?
Lorsque tu mets "%5s", scanf va lire 5 caractères et mettre le caractère terminal juste après. Ce qui fera 6 caractères au total, et donc un petit stack overflow (ou heap overflow s'il s'agit d'un pointeur).
Normal, le format "%s" ne prend pas le retour chariot.
Tu peux expliquer du coup l'histoire du -1 ?
Lorsque tu mets "%5s", scanf va lire 5 caractères et mettre le caractère terminal juste après. Ce qui fera 6 caractères au total, et donc un petit stack overflow (ou heap overflow s'il s'agit d'un pointeur).