Voilà, 1er problème, je tente d’utiliser la fonction fgets pour écrire dans un fichier, cependant mon pointeur sur fichier me renvoie NULL, je ne comprends pas vraiment pourquoi.
Voici la partie du code :
printf("\nPour ecrire dans un fichier, rentrez son titre precede de son emplacement\n\n");
char titre_fichier_tab[100];
fgets(titre_fichier_tab, 100, stdin);
FILE *fichier = NULL;
fichier = fopen(titre_fichier_tab,"w");
viderBuffer();
Je passe donc par mon else (que je vais vous montrer après, et je penses qu'il y a également un problème avec mon if.
Voici la suite
if (fichier != NULL)
{
printf("\nEcrivez maintenant ce que vous voulez ecrire dans le fichier (limitation 1000 caracteres)\n\n");
char texte_tab[1000];
fgets(texte_tab, 1000, stdin);
viderBuffer();
// On l'écrit dans le fichier
fprintf(fichier, "%s", texte_tab);
fclose(fichier);
}
else
{
// On affiche un message d'erreur
printf("Impossible d'ouvrir le fichier %s", titre_fichier_tab);
}
Les deux problèmes dans le même code :
printf("\nPour ecrire dans un fichier, rentrez son titre precede de son emplacement\n\n");
char titre_fichier_tab[100];
fgets(titre_fichier_tab, 100, stdin);
FILE *fichier = NULL;
fichier = fopen(titre_fichier_tab,"w");
viderBuffer();
if (fichier != NULL)
{
printf("\nEcrivez maintenant ce que vous voulez ecrire dans le fichier (limitation 1000 caracteres)\n\n");
char texte_tab[1000];
fgets(texte_tab, 1000, stdin);
viderBuffer();
// On l'écrit dans le fichier
fprintf(fichier, "%s", texte_tab);
fclose(fichier);
}
else
{
// On affiche un message d'erreur
printf("Impossible d'ouvrir le fichier %s", titre_fichier_tab);
}
Voilà, 1er problème, je tente d’utiliser la fonction fgets pour écrire lire dans un fichier, cependant mon pointeur sur fichier me renvoie NULL, je ne comprends pas vraiment pourquoi.
Sinon, le problème viens du fait que fgets lit sur l'entrée standard jusqu'à rencontrer un '\n' ou bien jusqu'à ce qu'il n'y ait plus de place dans le tampon spécifié ou qu'elle rencontre la fin de fichier. Or, lorsque fgets rencontre le '\n', elle l'ajoute au tampon passé en argument. A cause de ce caractère en plus, le nom de fichier que tu passes à fopen est invalide, d'où l'erreur.
Pour résoudre ce problème simplement, tu peux utiliser ce petit bout de code après ton appel à fgets:
Oui en effet, après un scanf, il reste toujours au moins un '\n' dans le buffer.
Ce qui pose problème si on utilise fgets ensuite car fgets va lire le '\n' en premier et donc ne vas rien enregistrer dans la chaine (sauf le '\n' )
🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles- ♡ Copying is an act of love.
Alors, après toutes mes petites modifications, j'ai toujours un problème (désolé je suis débutant hein )
Donc en fait mon pointeur fichier de type FILE est égal à NULL il ne prends pas la valeur de ma variable, et du coup de passe par le else, et j'ai une erreur (que j'ai moi même créé).
Donc voici le code qui ne fonctionne pas :
viderBuffer();
// Code pour le choix 2 . Ecrire dans un fichier
printf("\nPour ecrire dans un fichier, rentrez son titre precede de son emplacement\n\n");
char titre_fichier[100];
int *pTitre_Fichier = &titre_fichier;
// J'envoie un pointeur à ma fonction saisie qui est "sensé" retirer le \n à la fin faire le fgets()
saisie(pTitre_Fichier, 100);
FILE* fichier = NULL;
fichier = fopen(titre_fichier, "r+");
viderBuffer();
// Je ne passe pas par le if mais par le else
if (fichier != NULL)
{
printf("\nEcrivez maintenant ce que vous voulez ecrire dans le fichier (limitation 1000 caracteres)\n\n");
char texte[1000];
int *pTexte = &texte;
saisie(pTexte, 1000);
// On l'écrit dans le fichier
fprintf(fichier, "%s", texte);
fclose(fichier);
}
else
{
// On affiche un message d'erreur
printf("\nImpossible de creer le fichier %s\n", titre_fichier);
}
Désolé pour la syntaxe un peu décalée vers la droite mais ce code se trouve dans un gros switch.
Et voici ma fonction saisie()
int saisie(char *chaine, int longueur)
{
char *p = NULL;
// On lit le texte saisi au clavier
if (fgets(chaine, longueur, stdin) != NULL) // Si la saisie se fait sans erreur
{
p = strchr(chaine, '\n'); // On recherche l'"Entrée"
if (p != NULL) // Si on a trouvé le retour à la ligne
{
*p = '\0'; // On remplace ce caractère par \0
}
return 1; // On renvoie 1 si la fonction s'est déroulée sans erreur
}
else
{
return 0; // On renvoie 0 s'il y a eu une erreur
}
}
Merci d'avance pour votre aide, c'est grâce à vous que le SDZ prends un intérêt
Ce n'est pas à faire en temps normale on devrait utiliser un debuger, mais pour allez plus vite, tu peux rajouter un : printf("[%s]\n",titre_fichier);
Avant fopen() et nous afficher tout le contenue de la console ? (tous les caractères contenues entre les crochets, même les '\n' et les espace )
Edit: Un peu grilled
🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles- ♡ Copying is an act of love.
Affiche ta chaîne au début et a la fin de saisie().
Elle est identique à la saisie, et je penses qu'elle garde l'\n mais je ne suis pas sur.
Citation
Ce n'est pas à faire en temps normale on devrait utiliser un debuger, mais pour allez plus vite, tu peux rajouter un :
printf("[%s]\n", titre_fichier);
Sinon j'ai des nouvelles !!!
Si j'écris c:\test.txt ou c:\\test.txt je passes dans le else.
Cependant, si je tape simplement test.txt, je passes dans le if, un peu bizarre non ?
Rappelle toi, tu es sous Windows, les admins sont "Windows" et les virus, ... pas toi
Lorsque tu crées un fichier en écrivant juste "teste.txt", il se trouve au même endroit que l'exécutable.
@lucas-84: En effet c'est une erreur, mais généralement, ça ne change pas grand chose (mais c'est tout de même un erreur, tu as raison ) donc a corrigée.
🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles- ♡ Copying is an act of love.
Rappelle toi, tu es sous Windows, les admins sont "Windows" et les virus, ... pas toi
Ne t'inquiètes pas, je suis peut-être pas programmeur confirmé, mais les droits ça me connait, je suis administrateur réseau depuis un an en entreprise (en formation).
Je peut te confirmer que l'erreur ne se trouvait pas au niveau des droits (j'ai vérifié avant ^^).
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Kevin Cousin, passionné d'informatique
Kevin Cousin, passionné d'informatique
🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles - ♡ Copying is an act of love.
Kevin Cousin, passionné d'informatique
🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles - ♡ Copying is an act of love.
Kevin Cousin, passionné d'informatique
🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles - ♡ Copying is an act of love.
Kevin Cousin, passionné d'informatique
🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles - ♡ Copying is an act of love.
Kevin Cousin, passionné d'informatique
🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles - ♡ Copying is an act of love.
Kevin Cousin, passionné d'informatique
Kevin Cousin, passionné d'informatique
Kevin Cousin, passionné d'informatique
🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles - ♡ Copying is an act of love.
Kevin Cousin, passionné d'informatique
🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles - ♡ Copying is an act of love.
Kevin Cousin, passionné d'informatique
Kevin Cousin, passionné d'informatique