IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

besoin d'avis sur mon code


Sujet :

C

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 24
    Points : 15
    Points
    15
    Par défaut besoin d'avis sur mon code
    bonjour,
    je viens d'ecrire une fonction qui lit et ecrit dans un fichier
    elle fait bien le travail mais ne s'arrete pas car j'ai ce message dela console "
    processus arrete
    "

    voici mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    FILE* read_write(FILE* f){
    	FILE* f_lign = fopen("text_lign.txt","r+");
    	char c=fgetc(f);
    	while((f!=NULL)&&(c!=EOF)){
    		if(((c==' ')||(c=='\n'))){	
    			fputs("\n",f_lign);
    			//printf("\n");
    		} else {
    			fputc(c,f_lign);
    			//printf("%c",c);
    		}
    		c=fgetc(f);
    	}
    	return f_lign;
    	fclose(f_lign);
    }
    merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Elle ne s'arrête pas car j'ai le message "processus arrêté"
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 24
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    car sa n'execute pas la suite du programme
    pendant un moment on a l'impression qu'il ya un beug et ensuite sa m'affiche processus arrete
    si tu veux je te met l'ensemble du code

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 24
    Points : 15
    Points
    15
    Par défaut
    voici l'ensemble de mon code

    fichier full.c
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    #include <stdlib.h>
    #include <stdio.h>
    #include <assert.h>
    #include <string.h>
    #include "test.h"
    #include "test.c"
    #include "test_read_fich.c"
    #define TAILLE_MAX 28
     
    Pelt chain(FILE *p){
    	Pelt li = malloc(sizeof(elt));
    	char *c =malloc(sizeof(char));
    	fgets(c,TAILLE_MAX,p);
    	elt f=new_elt(c);
    	li=new_list();
    	li=add(li,f);
    	while((*c)!=EOF){
    		f=new_elt(c);	
    		li=add(li,f);	
    		fgets(c,TAILLE_MAX,p);
    	}
     
    	return li;
    }
     
    int main(){
    	printf("afic 12");
    	FILE* fic = NULL;
    	printf("afic 13");
    	FILE* f = NULL;
    	printf("afic 14");
    	fic = fopen("test.txt","r");
    	printf("afic hjhjhj ");
    	assert(fic!=NULL);
    	printf("afic ");
    	f=read_write(fic);
    	printf("afic889 ");
    	Pelt g=malloc(sizeof(elt));
    	printf("afic0023 ");
    	g=chain(f);
    	affich_list(g);
    	printf("afic good5848484 ");
    	fclose(fic);
    	return EXIT_SUCCESS;
    }
    fichier test_read.c
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    #include <stdlib.h>
    #include <stdio.h>
    #include <assert.h>
    #include <string.h>
    #include "test.h"
     
    FILE* read_write(FILE* f){
    	FILE* f_lign = fopen("text_lign.txt","r+");
    	assert(f!=NULL);
    	char c=fgetc(f);
    	while((c!=EOF)){
    		if(((c==' ')||(c=='\n'))){	
    			fputs("\n",f_lign);
    			//printf("\n");
    		} else {
    			fputc(c,f_lign);
    			//printf("%c",c);
    		}
    		c=fgetc(f);
    	}
    	return f_lign;
    	fclose(f_lign);
    }
     
     
     
     
     
    /**int main(){
            FILE* fic = NULL;
            fic = fopen("test.txt","r");
            assert(fic!=NULL);
            printf("afic ");
            read_write(fic);
            fclose(fic);
            return EXIT_SUCCESS;
    }**/
    fichier test.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    #include <stdlib.h>
    #include <stdio.h>
    #include <assert.h>
    #include <string.h>
    #ifndef TEST_H
    #define TEST_H
     
     
    typedef struct elt *Pelt;
    typedef struct elt {
    	char* nam;
    	Pelt next;
    }elt;
     
    typedef struct liste{
    	Pelt first;
    	int size;
    }*liste;
     
    // fonction defini dans test.c
    elt new_elt (char *n);
    Pelt new_Pelt(elt e);
    Pelt new_list();
    Pelt add_vid(Pelt lister, elt te);
    Pelt last_elt(Pelt l);
    Pelt add_list_elt(Pelt list, elt e);
    Pelt add(Pelt list, elt e);
    Pelt add_Pelt(Pelt list, Pelt b);
    void affich_list(Pelt r);
    Pelt prev_elt(Pelt l, elt e);
    Pelt suiv_elt(Pelt l, elt e);
    Pelt ins_elt(Pelt l, elt e,elt h);
     
    FILE* read_write(FILE* f);
    //fin fonction defini dans test_read_fich.c
     
    Pelt chain(FILE *p);
    //fin fonction defini dans full_chain.c
    #endif

  5. #5
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par chrislains Voir le message
    voici l'ensemble de mon code
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef struct elt *Pelt;
    Bonjour

    M8oi, quand je vois ça, j'arrête de lire. Cacher une étoile est la dernière des choses à faire. On ne sait plus si les variables sont des pointeurs ou pas. Or, savoir ce qu'on manipule est primordial en C.

    Citation Envoyé par chrislains Voir le message
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Pelt chain(FILE *p){
    	Pelt li = malloc(sizeof(elt));
    	char *c =malloc(sizeof(char));
    Et voilà. "c" est un pointeur (on se demande d'ailleurs pourquoi tu ne l'as pas défini directement comme "char c") et "li" est aussi un pointeur. Sauf que les deux pointeurs (qui sont du même rang) n'ont pas le même nombre (visible) d'étoiles. Comment veux-tu t'en sortir après ça...

    Citation Envoyé par chrislains Voir le message
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Pelt chain(FILE *p){
    	char *c =malloc(sizeof(char));
    	fgets(c,TAILLE_MAX,p);
    Ah oui, classe !!!

    Citation Envoyé par chrislains Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    FILE* read_write(FILE* f){
    	FILE* f_lign = fopen("text_lign.txt","r+");
    	...
    	return f_lign;
    	fclose(f_lign);
    }
    Ouais, pourquoi pas !!! Ce qui me tue le plus, c'est que ça ne te choque même pas au moment où tu l'écris. Mais bon, vu ce que j'ai vu avant...


    Autres remarques: ta gestion des erreurs est très mal faite. Tes assertions feront quitter salement ton code si elles ne sont pas respectées. Or, quand quelque chose se passe mal, il faut gérer (nettoyer les ressources allouées, etc) et non pas tout quitter comme un malpropre.
    Exemple de gestion
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    <type>fonction(...)
    {
    	char *xxx=NULL;
    	FILE *yyy=NULL;
    	int *zzz=NULL;
     
    	errno=0;
    	if ((xxx=malloc(...)) == NULL) goto fin:
    	if ((yyy=fopen(...)) == NULL) goto fin:
    	if ((zzz=malloc(...)) == NULL) goto fin:
     
    	... (travail) ...
     
    	fin:
    	if (xxx) free(xxx);
    	if (yyy) fclose(yyy);
    	if (zzz) free(zzz);
    	return errno == 0 ?valeur_ok :valeur_speciale_indiquant_erreur (souvent NULL)
    }

    Et bon ben si les types standards ont un suffixe "_t" dans leur nom, ce n'est peut-être pas pour rien. Donc toi, ce serait bien de mettre un préfixe "t_" à tes propres types...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    M8oi, quand je vois ça, j'arrête de lire.
    Finalement, tu l'as quand même fais, moi j'ai vraiment arrêté, je ne comprend absolument pas la plus value pédagogique d'insister sur cette mauvaise pratique...
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 24
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Et bon ben si les types standards ont un suffixe "_t" dans leur nom, ce n'est peut-être pas pour rien. Donc toi, ce serait bien de mettre un préfixe "t_" à tes propres types...
    En gros, si je crée un type que j'appelle ens, il faudrait que j’écrive t_ens ?

  8. #8
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par chrislains Voir le message
    En gros, si je crée un type que j'appelle ens, il faudrait que j’écrive t_ens ?
    Exactement. Déjà ça prêtera moins à confusion quand on lit le code et ça te laissera le token "ens" libre pour un nom de variable...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 24
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Exactement. Déjà ça prêtera moins à confusion quand on lit le code et ça te laissera le token "ens" libre pour un nom de variable...
    Merci Sver@r pour tes réponses
    Peux tu m'expliquer tes autres remarques ? Stp car je ne comprends toujours pas

  10. #10
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par chrislains Voir le message
    car je ne comprends toujours pas
    Pfff
    1) Tu fais un malloc de "1" alors que tu vas y stocker 28 caractère lus dans le fichier. D'ailleurs, pourquoi un malloc pour une zone qui n'est traitée que dans la fonction et qui ne ressort nulle part ???
    2) Tu quittes la fonction avant de fermer le fichier
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  11. #11
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Et qui a moinssé Sve@r et pourquoi?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  12. #12
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Bah, probablement chrislains quand je l'ai mis face à lui-même et que ce qu'il a vu ne lui a pas plu. Comme il ne pouvait pas se moinsser lui-même, il a moinssé le porteur de mauvaises nouvelles comme le faisaient autrefois les tyrans aux petits pieds...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  13. #13
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 24
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Bah, probablement chrislains quand je l'ai mis face à lui-même et que ce qu'il a vu ne lui a pas plu. Comme il ne pouvait pas se moinsser lui-même, il a moinssé le porteur de mauvaises nouvelles comme le faisaient autrefois les tyrans aux petits pieds...
    non je ne t'ai pas moinsser, au contraire je suis content d'avoir eu tes remarques, car je ne cherche qu'a apprendre et a m'ameliorer
    je suis entrain de corriger mon programme

Discussions similaires

  1. [XL-2003] Votre avis sur mon code en VBA ?
    Par [ZiP] dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 02/03/2010, 13h56
  2. Besoin d'avis sur mon rapport hijackthis
    Par gkhan dans le forum Sécurité
    Réponses: 16
    Dernier message: 29/05/2008, 19h57
  3. Besoin d'avis sur mon formulaire
    Par Olivier Regnier dans le forum Web
    Réponses: 2
    Dernier message: 16/11/2007, 09h46
  4. [FFT] Votre avis sur mon code
    Par deubelte dans le forum C++
    Réponses: 1
    Dernier message: 10/02/2007, 20h14
  5. Besoin d'avis sur mon thread
    Par SanNash dans le forum Concurrence et multi-thread
    Réponses: 1
    Dernier message: 20/06/2006, 11h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo