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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif 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
    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

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    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 840
    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
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    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 très actif
    Avatar de sambia39
    Homme Profil pro
    No Comment
    Inscrit en
    Mai 2010
    Messages
    551
    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 : 551
    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.

  5. #5
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 599
    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
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    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 840
    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]

+ 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