Probleme langage C

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;
}

3 réponses

  • Votes
  • Date
  • Date décroissante
  1. Contributeur
    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,
    1. 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).
      1. merci beaucoup pour votre aide c'est très gentil de ta part..........@+