Probleme langage C

scarface90 -  
 scarface90 -
Bonjour, voila mon code source je suis entrain de saisir un texte a l'aide des chaînes de caractères mais jai un problème avec le critère d'arrêt .........@+

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


int main()
{
FILE * sortie;
char Mots[20];
char nom_fichier[20];

printf("Nom du fichier a creer : ");
gets(nom_fichier);
sortie = fopen(nom_fichier, "w");

printf("Pour sortir de la boucle, entrer un point . vide\n");

printf("Entrez votre texte : \n");
gets(Mots);

while (strcmp(Mots,".")!=0)
{

fprintf(sortie, "Mots: %s", Mots);

gets(Mots);
}

fclose(sortie);

return 0;
}
A voir également:

3 réponses

fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Salut,

gets(nom_fichier);
Il ne faut pas utiliser cette fonction. Il faut lui préférer fgets.
De plus, attention cela stocke le '\n', donc il faut penser à le retirer.

sortie = fopen(nom_fichier, "w");
Comme dit avant nom_fichier contient un retour chariot. Donc le nom du fichier créé le possédera aussi.

De plus, il ne faut pas penser à vider le buffler clavier. Sinon cela altérera les autres lectures claviers.

gets(Mots);
Même remarque.

while (strcmp(Mots,".")!=0)
Mots ne peut pas faire "." puisqu'il contient également le '\n' en fin de caractère. D'où le fait qu'il faut penser à retirer le caractère '\n' et aussi vider le buffer clavier comme dit plus haut.

Cdlt,
0
Emmanuel Delahaye Messages postés 107 Date d'inscription   Statut Membre Dernière intervention   7
 
Ton code est presque correct.

ceci :
#include <stdio.h>
#include <stdlib.h>
#include <string.h> /* -ed- */

int main (void) /* -ed- */
{
   FILE *sortie;
   char Mots[20];
   char nom_fichier[20];

   printf ("Nom du fichier a creer : ");
   gets (nom_fichier);
   sortie = fopen (nom_fichier, "w");

   printf ("Pour sortir de la boucle, entrer un point . vide\n");

   printf ("Entrez votre texte : \n");
   gets (Mots);

   while (strcmp (Mots, ".") != 0)
   {
      fprintf (sortie, "Mots: %s", Mots);
      gets (Mots);
   }

   fclose (sortie);

   return 0;
}

fonctionne :

Nom du fichier a creer : xx.txt
Pour sortir de la boucle, entrer un point . vide
Entrez votre texte :
Hello world
.

Process returned 0 (0x0)   execution time : 10.336 s
Press any key to continue.


Le fichier produit est :

Mots: Hello world

Attention, il manque un \n en fin de ligne ...

Ensuite, comme déjà signalé, il ne faut pas utiliser gets() en production. Les saisies sûres en C nécessitent un peu de travail.

http://www.bien-programmer.fr/notes.php#saisie

Enfin, il manque le contrôle de validité de l'ouverture du fichier (fopen() peut très bien retourner NULL, même en création).
0
scarface90
 
merci beaucoup pour votre aide c'est très gentil de ta part..........@+
0