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

3 réponses

  1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    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
  2. Emmanuel Delahaye Messages postés 119 Statut Membre 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
  3. scarface90
     
    merci beaucoup pour votre aide c'est très gentil de ta part..........@+
    0