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 :

2 fonctions dans lesquelles fprintf n'écrive pas dans le fichier txt


Sujet :

C

  1. #1
    Membre régulier Avatar de J4e8a16n
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 271
    Points : 119
    Points
    119
    Par défaut 2 fonctions dans lesquelles fprintf n'écrive pas dans le fichier txt
    Bonjour à tous,


    Je ne trouve pas pour quoi mes 2 fonctions
    void spacer(int);
    void T_Title(char *);

    n'écrive pas dans le fichier outfile.


    Le reste du code fonctionne:
    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
     
    Extrait:
    					@A Title
    	         the varnish remover was  heated using a
    hot water bath			methylene chloride boils
    at 39.6 degrees Celsius
    so it's going to be the first fraction
     
    -----------___------------___------------___------------___------------___------------___-
     
    extrait:
    @A Title<BR>
             the varnish remover was  heated using a<BR>
    hot water bathmethylene chloride boils<BR>
    at 39.6 degrees Celsius<BR>
    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
     
     
     
    #include <ctype.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    void spacer(int);
    void T_Title(char *);
    int  T_Parse (char *);
     
    FILE *outfile;
    int check;
    static int a;
     
    void spacer(int in) {
     
    	fprintf(outfile, "<img src=\"pixel.png\" width=\"%d\" height=\"1\" alt=\"-\">", in);
     
    a= 0;
    }
     
    void T_Title(char *s) {
        fprintf (outfile,
                 "<html>\n<head>\n<title>%s</title>\n<STYLE TYPE='text/css'>\n", s);
        fprintf (outfile,
                 "body	{background:#edebec;color:black;}\n");
        fprintf (outfile,
                 "P	{text-indent: 5 em;}\n</STYLE>\n</head>\n");
        fprintf (outfile,
                 "<body>\n<center><h3><font color='#550000'>%s", s);
        fprintf (outfile,
                 "</font></h3></center><br>\n");
        }
     
    int T_Parse (char *filename) {
        FILE *f, *outfile;
        int c;
        char ch, ch1[50] ="", *ch2, *ch3;
        typedef enum {normal = 1, delay, add} parseState;
        typedef enum {NONE = 1, P, TAB, BR, IMG} lastTag;
        parseState state;
        lastTag Tag = NONE;
    	 state = normal;
        if (!fopen (filename, "r")) {
            fprintf (stderr, "\nError: Input file %s not found.\n", filename);
            return (-1);
            }
        f = fopen (filename, "r");
        c = strlen(filename) - 4;
        ch2 = strncat(ch1,filename, c);
        ch3 = strcat(ch2, ".html");
        outfile = fopen(ch3, "w");
     
     
        if (outfile) {
            T_Title(filename);
     
            while (!feof(f)) {
                ch = fgetc(f);
     
                switch (state) {
                    case normal:
                        switch(ch) {
                            case '\n':
                                state = delay;
                                break;
     
                            case '\t':
    								a = a + 3;
    								state = add;
    								break;
     
    /*                      case ' ':
    								s = s + 1;
    								state = add;
                                break;*/
     
                            default:
    								fprintf(outfile, "%c", ch);
                            break;
                            }
    						break;
                    case delay:
                        switch(ch) {
    								case '\n':
    										fprintf(outfile, "\n<P>");
    										state = normal;
    										Tag = P;
    										break;
     
    								default:
    									fprintf(outfile, "<BR>\n");
    									 if(ch == '\t'){
    										 a = a + 3;
    										 state = add;
    										}else{
    										 fprintf(outfile, "%c", ch);
    										 state = normal;
    										 }
    									break;
    						}
    			break;
    			case add:
                   switch(ch) {
                            case '\t':
                               a = a + 3;
    									Tag = TAB;
                               break;
     
    								default:
    									if(Tag == P)
    											fprintf(outfile, "<BR>\n");
    									 if(a>0){
    										Tag = IMG;
    										state = normal;
    										}
    									spacer(a);
    									a = 0;
    									fprintf(outfile, "%c", ch);
    									break;
    						}
    			break;
                    }/* end of states */
                }/* end of not eof */
    	    fprintf (outfile,"\n</body>\n</html>");
     
            }/* end of if outfile */
     
    	fclose(outfile);
        return 0;
        }
     
    int main(int argc, char *argv[]){
     
        if (argc > 0)
            T_Parse(argv[1]);
        else
            T_Parse(NULL);
     
     
        return 0;
        }
    Merci de me lire.

    JPDaviau
    Petit Malin
    "accélérateur . . . qui pousse . . . un électron a passer par deux trous d’un écran en même temps." (Cyrille Burt: "C’est mieux qu’un fantôme") (Janus p.251)
    "Joy is to love what is, pain is to love what is not"
    )

    HP Pavilion Elite Desktop PC 570-p0xx - Window10 64 bits - Intel(R) Core(TM)2 Quad CPU Q8200 @ 3GHz x86_64-w64-mingw32-gcc-7.3.0.exe

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    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 690
    Points : 30 986
    Points
    30 986
    Billets dans le blog
    1
    Par défaut
    Bonjour

    Citation Envoyé par J4e8a16n Voir le message
    Je ne trouve pas pour quoi mes 2 fonctions
    void spacer(int);
    void T_Title(char *);

    n'écrive pas dans le fichier outfile.
    Par où commencer ? Par ton indentation pourrie, par tes inutiles variables globales, par ton utilisation erronée de la fonction feof() ou bien par ton fopen(filename) dans le vide ?
    Un code aussi merdeux c'est indébuggable. Rajoute du printf() dans tes fonctions voir si elles sont bien appelées, si le fichier "outfile" est bien ouvert ; ou bien réécris tout.

    Citation Envoyé par J4e8a16n Voir le message
    Merci de me lire.
    Ouais ben si tu veux être lu, commence par écrire du code lisible. C'est vrai quoi, alors que c'est si simple d'écrire
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    if (truc) {
    	# une tabulation
    	action1;
    	action2;
    	if (machin) {
    		# deux tabulations
    		action3
    	}
    }
    toi tu mets 50 tabulations sur une ligne puis aucune sur la suivante puis 35 sur la 3°. Sans déconner quoi, on dirait presque que tu as fait exprès d'écrire aussi mal tellement cette écriture est encore plus difficile à produire qu'une écriture propre !!!
    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]

  3. #3
    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
    Hormis les remarques de Sve@r, je pense que l'explication de ton problème "immédiat" est que tu as deux variables outfile, une locale et une globale. Et maintenant tu comprends pourquoi c'est une très mauvaise idée.
    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.

  4. #4
    Membre expérimenté
    Avatar de sambia39
    Homme Profil pro
    No Comment
    Inscrit en
    Mai 2010
    Messages
    543
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : No Comment
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2010
    Messages : 543
    Points : 1 745
    Points
    1 745
    Par défaut
    Bonjour,
    (1)Ligne 46. Comme il a été dit, vous ne sauvegarder pas l'adresse que la fonction fopen vous renvoie.
    (2)Ligne 25. Ce n’est plus la variable pointeur locale outfile qui contient l'adresse du flux ouvert en écriture qui est utilisée, mais celle de la variable globale avec une adresse invalide soit ici (0x0) et à ce stade votre programme devrait se crasher.
    à bientôt.
    Celui qui peut, agit. Celui qui ne peut pas, enseigne.
    Il y a deux sortes de savants: les spécialistes, qui connaissent tout sur rien,
    et les philosophes, qui ne connaissent rien sur tout.
    George Bernard Shaw

  5. #5
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 565
    Points : 7 648
    Points
    7 648
    Par défaut
    Bonjour,

    Ton code utilises des concepts non simples, et pourtant il est rempli d'erreurs de débutant. Tu as dû avancer un peu trop vite dans ta formation sur le C.
    En quelques secondes on y voit immédiatement des problèmes. Je suis quasi-certain que le compilateur qui t'a lu avant nous a indiqué des anomalies, il faut les lire. Si tu ne comprends pas les warnings n'hésite pas à demander des précisions ici.
    Aux choses déjà signalées, j'ajoute que filename n'est pas ici un buffer que l'on peut modifier et strcat ne peut faire que des dégâts. Et argc est forcément strictement supérieur à zéro car on a toujours au moins un paramètre reçu qui est le nom de l’exécutable.
    Je t'encourage à réécrire lentement ton code.

  6. #6
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    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 690
    Points : 30 986
    Points
    30 986
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par J4e8a16n Voir le message
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    int main(int argc, char *argv[]){
     
        if (argc > 0)
            T_Parse(argv[1]);
        else
            T_Parse(NULL);
     
     
        return 0;
        }

    Citation Envoyé par dalfab Voir le message
    Et argc est forcément strictement supérieur à zéro car on a toujours au moins un paramètre reçu qui est le nom de l’exécutable.
    Et dans le cas où tu appelles ton programme sans argument, alors argc vaut effectivement 1 et argv[1] vaut NULL (et d'une façon plus générale argv[argc] vaut toujours NULL quelle que soit la valeur de "argc").
    Autrement dit, ton test ne sert à rien puisqu'en appelant de toute façon argv[1] soit il y a effectivement un argument et ta fonction le reçoit, soit il n'y en a pas et elle reçoit alors "NULL".
    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]

  7. #7
    Membre régulier Avatar de J4e8a16n
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 271
    Points : 119
    Points
    119
    Par défaut
    Je vous remercie tous. J'ai appliqué vos corrections Cela fonctionne.

    Je révise le code, point par point, le mieux possible.


    JPD
    Petit Malin
    "accélérateur . . . qui pousse . . . un électron a passer par deux trous d’un écran en même temps." (Cyrille Burt: "C’est mieux qu’un fantôme") (Janus p.251)
    "Joy is to love what is, pain is to love what is not"
    )

    HP Pavilion Elite Desktop PC 570-p0xx - Window10 64 bits - Intel(R) Core(TM)2 Quad CPU Q8200 @ 3GHz x86_64-w64-mingw32-gcc-7.3.0.exe

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 24/04/2015, 20h36
  2. [XL-2010] Fonction WeekDay fonctionne sur une macro, pas dans une autre
    Par eric4459 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 23/09/2014, 17h10
  3. Réponses: 2
    Dernier message: 27/09/2013, 09h40
  4. [ZF 1.11] la fonction log() de FirePhp ne marche pas dans les modules
    Par adilsoft dans le forum Zend Framework
    Réponses: 3
    Dernier message: 06/08/2013, 14h33
  5. Réponses: 3
    Dernier message: 26/01/2006, 13h11

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