Probleme langage C
scarface90
-
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;
}
#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:
- Probleme langage C
- Langage ascii - Guide
- Langage binaire - Guide
- Pascal langage - Télécharger - Édition & Programmation
- Langage visual basic - Télécharger - Langages
- Langage basic gratuit - Télécharger - Édition & Programmation
3 réponses
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,
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,
Ton code est presque correct.
ceci :
fonctionne :
Le fichier produit est :
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).
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).