Emmanuel Delahaye C is a sharp tool | Joker28 a écrit :
Cependant lorsque je compile ce programme sous dev C++ ou sous turbo C, il ne me met aucune erreur ni warning mais lorsque je lance l'éxécutable, le programme plante ou sous turbo C quand je fais run, ça me donne une sorte de boulce infinie avec que des <NULL> à l'écran...
Si quelqu'un pouvait me dire où j'ai fait l'erreur, ça serait sympa...
|
- fopen() peut échouer
- feof() ne fait pas ce que tu crois. Il faut tester le retour des fonctions de lecture.
- Un fichier ouvert en "w" est automatiquement créé sii il n'existe pas.
- f2 n'est pas fermé.
- La trace 'printf("%s", pos)' doit être mise après le test de pos...
A la vache, grillaid à 100% !
Code :
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #define DBG 0
- static void clean (char *s, FILE *fp)
- {
- /* search ... */
- char *p = strchr (s, '\n');
- if (p != NULL)
- {
- /* ... and kill */
- *p = 0;
- }
- else
- {
- /* purge */
- int c;
- while ((c = fgetc(fp)) != '\n' && c != EOF)
- {
- }
- }
- }
- static void chercher (char* nomfichier, FILE *f2)
- {
- FILE *f = fopen(nomfichier, "r" );
- if (f != NULL)
- {
- char information[256];
- while (fgets(information, sizeof information, f) != NULL)
- {
- /* strstr() renvoie la valeur du pointeur qui se trouve
- a la première ocurence des ":_" et stockage dans pos */
- char *pos = strstr(information, ": " );
- if (pos != NULL) //Si la valeur du pointeur n'est pas nulle...
- {
- #if DBG
- printf("%s", pos) ;
- #endif
- /* +2 : On saute ": " */
- /* Ecriture de la chaine dans le fichier texte cree */
- fprintf(f2, "%s", pos + 2);
- }
- }
- fclose (f), f = NULL;
- }
- else
- {
- perror(nomfichier);
- }
- }
- int main(void)
- {
- printf("Bienvenue dans le programme de tri des fiches de stage\n" );
- /* Liste toutes les fiches de stage dans res.txt */
- system("dir *.txt /b > res.txt" );
- {
- /* OUvre ce fichier */
- char const fres[] = "res.txt";
- #define FICHE "fiche.txt"
- FILE *f = fopen(fres, "r" );
- if (f != NULL)
- {
- FILE *fw = fopen(FICHE, "w" );
- if (fw != NULL)
- {
- char nomfichier[256];
- while (fgets( nomfichier, sizeof nomfichier, f ) != NULL)
- {
- clean(nomfichier, f);
- chercher(nomfichier, fw);
- }
- fclose(fw), fw = NULL;
- #if 1
- system ("type "FICHE);
- #endif
- }
- else
- {
- perror(FICHE);
- }
- fclose(f), f = NULL;
- }
- else
- {
- perror("res.txt" );
- }
- }
- return 0;
- }
|
Message édité par Emmanuel Delahaye le 19-04-2006 à 11:19:43 ---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
|