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

Bibliothèque standard C Discussion :

Création d'une page html à partir d'un prog en C


Sujet :

Bibliothèque standard C

  1. #1
    Futur Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 4
    Points : 5
    Points
    5
    Par défaut Création d'une page html à partir d'un prog en C
    Bonjour à tous!

    Après plusieurs recherches plutôt infructueuses, je décide de m'en remettre à vous.

    Je dois créer un code en C me permettant de générer une page HTML contenant un trombinoscope, dans le cadre d'un petit programme de gestion des ressources humaines que je dois réaliser pour mes cours.

    J'ai donc déjà fait le code que voici :

    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <windows.h>
     
    typedef struct
            {
             char nom[25];
             char prenom[15];
            }Employe;
     
    void genereHtml(Employe employe,FILE* pfichier)
    {
         printf("Entrez un nom\n");
         gets(employe.nom);
         printf("Entrez un prenom\n");
         gets(employe.prenom);
         fprintf(pfichier,"<td><img src='%s_%s.jpg' alt='%s %s' /></td>",employe.nom,employe.prenom,employe.nom,employe.prenom); 
    }
    int main()
    {
        int test;
        Employe employe;
        char ouinon;
        char fin[]="</tr>\n</table>\n</body>\n</html>\n";
        char debut[]="<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>\n<html xmlns='http://www.w3.org/1999/xhtml' xml:lang='fr' lang='fr'>\n<head>\n<title>\nTrombinoscope\n</title>\n<meta http-equiv='Content-Type'  content='text/html;charset=utf-8' />\n<link rel='stylesheet' media='screen' type='text/css' title='trombi' href='trombi.css' />\n</head>\n<body>\n<h1>Trombinoscope<br/></h1>\n<table>\n";
     
        FILE* pfichier=fopen("testhtml.htm","r");
        if(pfichier==NULL)
        {
            fclose(pfichier);
            FILE* pfichier=fopen("testhtml.htm","a+");
            fprintf(pfichier,"%s",debut);
        }
        else
        {
            fclose(pfichier);
            FILE* pfichier=fopen("testhtml.htm","a+");
        }
        do
        {    
            genereHtml(employe,pfichier);
        	printf("Une autre personne? (o/n)\n");
        	fflush(stdin);
        	scanf("%c",&ouinon);
        	fflush(stdin);	
        }while((ouinon=='o')||(ouinon=='O'));
     
        fprintf(pfichier,"%s",fin);
    	system("pause");
    	fclose(pfichier);
    	return 0;
    }
    Dans ce programme, j'entre un nom et un prénom, et celui-ci me génère la page html contenant la photo correspondante. Mais j'ai plusieurs problèmes :

    - Je teste si le fichier existe et c'est là le problème : si il n'existe pas, le programme le crée, il y ajoute la chaîne de caractères début et me demande le nom de la personne, comme d'habitude. Mais lorsque j'ouvre ensuite le fichier html ainsi créé, il contient effectivement la chaîne début, mais la personne n'a pas été ajoutée dans le code, comme si le programme n'avait pas tenu compte du
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fprintf(pfichier,"<td><img src='%s_%s.jpg' alt='%s %s' /></td>",employe.nom,employe.prenom,employe.nom,employe.prenom);
    de la procédure "genereHtml".
    J'aimerais donc savoir si vous pouviez m'éclairer là-dessus car je viens d'y passer un après-midi sans comprendre pourquoi ça ne fonctionne pas.
    je précise que je débute dans l'édition de fichiers en C.

    ( Je suis quasiment sûr que j'ai fait une bêtise quelque part, ce serait bien mon genre, mais là je ne trouve pas )

    Merci beaucoup d'avance,
    Adrilo
    Fichiers attachés Fichiers attachés

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 897
    Points : 219 630
    Points
    219 630
    Billets dans le blog
    125
    Par défaut
    Bonjour

    Deux petites remarques:

    Je travaille sous linux , et essayant de compiler avec gcc , il m'a dit le fichier windows.h n'existe pas. C'est normal. Par contre, tu peux enlever la ligne #include <windows.h> car il semble que tu n'en ai pas besoin
    Deuxièmement , gets() peut être une faille de sécurité. Bon certes tu peux me dire que tu n'a pas à t'en préoccupé. Mais il faut prendre de bonnes habitudes, le plus vite possible tu peux le remplacer facilement par un fgets(). ( Tu regarde vite fais une doc , et si besoin tu demande , mais rien de compliquer

    Euh , le programme me fait une erreur de segmentation dès le lancement.

    Et, j'ai souvent lu , que les fflush(stdin) ont un comportement indéfini. Les fflush ne se font donc que sur stdout.

    Ah , j'ai plus l'erreur de segmentation quand je crée un fichier ( même vide ).

    Donc je ne peux pas trop répondre à ta question actuellement.

    Pense à commentez ton code aussi

    Et juste un point que j'ai pas compris , ( et peut être est là ton erreur ) c'est que tu ouvre ton fichier en mode 'r' , tu vois s'il est ouvert , si oui tu le ferme , le rouvre en 'a+'
    Mais dans le cas ou il n'existe pas , tu le ferme ( erreur de segmentation venait de là ; ne ferme pas un fichier qui n'a pas reussi à ouvrir ) , et tu l'ouvre en 'a+' , comme pour l'autre cas. D'ailleurs pour la deuxième ouverture , verifie s'il la bien ouvert , je pense qu'il y a un problème aussi à ce niveau. Pour cela que le fprintf qui met le debut ne marcherai pas , de plus , ça bug après vu que moi le fichier , il est pas ouvert ....
    Tu peux faire un debugguage en pas à pas pour mieux comprendre. Et pour regarder les valeurs des variables.

    Normalement tu vas vite trouvé le(s) bug(s).

  3. #3
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        FILE* pfichier=fopen("testhtml.htm","r");
        if(pfichier==NULL)
        {
            fclose(pfichier);
            FILE* pfichier=fopen("testhtml.htm","a+");
            fprintf(pfichier,"%s",debut);
        }
        else
        {
            fclose(pfichier);
            FILE* pfichier=fopen("testhtml.htm","a+");
        }
    Le code ci dessus est louche pour deux raisons :
    1 on redéfinit à chaque fois pfichier....
    que se passe-t-il si on modifie pfichier dans le if ou le else ? le pfichier en dehors n'est pas modifié. Il faut donc vite supprimer ces déclarations supplémentaires.

    2 un fclose sur un fichier non ouvert n'est pas permis non plus

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        FILE* pfichier=fopen("testhtml.htm","r");
        if(pfichier==NULL)
        {
            pfichier=fopen("testhtml.htm","a+");
            fprintf(pfichier,"%s",debut);
        }
        else
        {
            fclose(pfichier);
            pfichier=fopen("testhtml.htm","a+");
        }
    Le résultat obtenu semble correct une fois ces corrections faites.

    on remplace aussi par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fgets(toto, sizeof toto, stdin);
    on supprime qui n'est pas portable.
    et on remplace qui a un comportement indéfini par fclean qu'on peut trouver sur ce forum.

  4. #4
    Futur Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Merci beaucoup, mon problème est résolu!

    Ca fait plaisir de tomber sur des gens aussi réactifs et sympathiques!

    Je saurais où m'adresser maintenant si y'a du C que je ne comprends pas

    A bientôt!
    Adrilo

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 19/11/2008, 18h51
  2. création d'une page HTML
    Par malikakika dans le forum C++Builder
    Réponses: 3
    Dernier message: 12/07/2008, 11h43
  3. Réponses: 7
    Dernier message: 14/05/2007, 16h31
  4. Afficher une page HTML à partir de code HTML
    Par lilou77 dans le forum Interfaces Graphiques en Java
    Réponses: 1
    Dernier message: 18/01/2007, 11h52
  5. [Tableaux] Sauvegarde (création) d'une page HTML
    Par ythim dans le forum Langage
    Réponses: 9
    Dernier message: 22/06/2006, 14h45

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