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 :

Créer un fichier « .h » (menu)


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Haïti

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Février 2013
    Messages : 15
    Par défaut Créer un fichier « .h » (menu)
    Salut a tous, je suis a bout de souffre. je n'arrive pas a appeler mes programmes.
    En fait, mes codes sont très long. Je veux les couper en modules. Voila ce que je fais :


    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
    #include<stdio.h> 
    #include<stdlib.h> 
    #include<conio.h> 
    #include<time.h> 
    #include"menu.h" //je rattache ma fonction affiche_menu() au main.c 
    #include"information.h" //je rattache ma fonction information() au main.c 
    int main() 
    { 
    char ch = 'A';'B';'C';'D';'E';'F';'G';'H';//Declaration des caracteres 
     
    do 
    { 
    affiche_menu();//Appelle de la fct affiche_menu 
    ch = getch(); 
    scanf("%c",&ch); //lecture des characteres. 
    switch (ch) 
    { 
    case 'A': 
    printf("\n\nBienvenue sur le programme permettant de saisir des informations des etudiants\nPressez une touche quelconque"); 
    void information(); //j'appelle ma fonction. 
     
    getch(); 
    break; 
    case 'B': 
    printf("\n\nBienvenue sur le Programme permettant d afficher les informations saisies au point 1\nPressez une touche quelconque"); 
    getch(); 
    break; 
    case 'C': 
    printf("\n\nBienvenue sur le Programme permettant de trouver la factorielle d une valeur entiere\nPressez une touche quelconque"); 
    getch(); 
    break; 
    case 'D':printf("\n\nBienvenue sur le Programme permettant de trouver la combinaison de deux valeurs entieres"); 
    getch(); 
    break; 
    case 'E':printf("\n\nBienvenue sur le Programme permettant de former l anagramme d un nom d une personne"); 
    getch(); 
    break; 
    case 'F':printf("\n\nBienvenue sur le Programme permettant de changer la date de l ordinateur"); 
    getch(); 
    break; 
    case 'G':printf("\n\nBienvenue sur le Programme permettant d eteindre l ordinateur"); 
    getch(); 
    break; 
    case 'H':printf("\n\nBienvenue sur le Programme permettant de classer par ordre croissant et decroissant des valeurs saisis"); 
    getch(); 
    break; 
    default: 
    printf("\n\nVotre choix est erroné\nPressez une touche quelconque et réessayez\n"); 
    getch(); 
    break; 
    } 
    } while (ch != '4'); 
    return 0; 
    }


    Ca marche ps,svp j'ai vous prie de m'aider.

  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
    Citation Envoyé par bazvindous Voir le message
    Ca marche ps,svp j'ai vous prie de m'aider.
    Salut
    http://fr.lang.free.fr/cours/Generalites_Csyst_v1.0.pdf (p. 9 a 11)

    Citation Envoyé par bazvindous Voir le message
    je suis a bout de souffre...
    Jolie formule. Plus adaptee a Belzebuth qu'a un humain qui serait plutot a bout de souffle...
    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

    La ligne void information(); //j'appelle ma fonction. est mauvaise, elle redéclare la fonction au lieu de l'appeler.
    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 averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Haïti

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Février 2013
    Messages : 15
    Par défaut
    Citation Envoyé par Médinoc Voir le message

    La ligne void information(); //j'appelle ma fonction. est mauvaise, elle redéclare la fonction au lieu de l'appeler.
    Merci pour ta reponce rapide, et remarque. En faite c'est justement ca mes problemes.
    J'ai 7 programmes(deja preparer) a mettre dans le menu,mais je ne sais pas comment.
    Comme celui-la:
    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
       #include<stdio.h>
        #include<conio.h>
     
        #define max 500
        void information()
     
        {
        char nom[max];
        char prenom[max];
        char adresse[max];
        char sexe[max];
        char option[max];
        int age;
        int telephone;
        printf("");
        gets(nom);
        printf(" Entrer votre nom : \n");
        gets(nom);
        printf("Entrer votre prenom: \n");
        gets(prenom);
         printf("Entrer votre adresse: \n");
        gets(adresse);
         printf("Entrer votre sexe: \n");
        gets(sexe);
         printf("Entrer votre option: \n");
        gets(option);
         printf("Entrer votre age: \n");
        scanf("%d",&age);
         printf("Entrer votre telephone: \n");
        scanf("%d",&telephone);
     
                            //creation d'un pointeur FILE
        FILE*pointeurfichier=NULL;
                            //appel a la fonction fopen
        pointeurfichier=fopen("Les informations des etudians.doc","w");
                            //test sur l'ouverture
        if(pointeurfichier!=NULL)
        {
            fprintf(pointeurfichier,"### les informations ###\n");
            fprintf(pointeurfichier," %s \n",nom);
            fprintf(pointeurfichier,"%s \n", prenom);
            fprintf(pointeurfichier,"%s \n", adresse);
            fprintf(pointeurfichier," %s \n", sexe);
            fprintf(pointeurfichier,"%s \n", option);
            fprintf(pointeurfichier,"%d \n",age);
            fprintf(pointeurfichier,"%d \n",telephone);
        }
        else
        {
            printf("impossible d'ouvrir le fichier");
        }
         fclose(pointeurfichier);
     
     
     
    return(0);
     
    }
    Comment faire(qoui mettre dans le menu) pour l'appeler a l'aide du menu, en tappant A.
    merci a tous.

  5. #5
    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
    D'abord, des fonctions pour la saisie de chaîne sans utiliser gets():
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    /*fpurge.h*/
     
    #ifndef FPURGE_H_20130223
    #define FPURGE_H_20130223
     
    #include <stdio.h>
     
    int truncate_newline(char *str);
    int fpurge(FILE *f);
    int fclean(char *str, FILE *f);
     
    #endif /* ! FPURGE_H_20130223 */
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    /*fpurge.c*/
    #include <stdio.h>
     
    /*Fonction pour retirer le \n à la fin d'une chaîne
      (en fait, elle tronque la chaîne au premier \n rencontré).*/
    /* Returns a nonzero value if found, zero if not. */
    int truncate_newline(char *str)
    {
    	int bRet=0;
    	if(str!=NULL)
    	{
    		char *pNewline = strchr(str, '\n');
    		if(pNewLine!=NULL)
    		{
    			bRet = 1;
    			*pNewLine = '\0';
    		}
    	}
    	return bRet;
    }
     
    /*Fonction pour vider le flux entrant jusqu'à la fin de la ligne.*/
    /*Returns 0 if OK, a negative value if EOF.*/
    int fpurge(FILE *f)
    {
    	int c;
    	while((c=fgetc(f))!=EOF && c!='\n')
    	{ }
    	return (c==EOF ? -1 : 0);
    }
     
    /*Fonction qui retire le \n à la fin ET s'assure que toute la ligne a été lue.*/ 
    /* Returns 0 if buffer is full, a positive value if line is complete,
       a negative value if EOF (implies buffer full). */
    int fclean(char *str, FILE *f)
    {
    	int ret = 1;
    	if(!truncate_newline(str))
    		ret = fpurge(f);
    	return ret;
    }
    Ensuite, le code utile:
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    /*Information.h*/
     
    #ifndef INFORMATION_H_20130223
    #define INFORMATION_H_20130223
     
    void information(void);
     
    #endif /* ! INFORMATION_H_20130223 */
    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
    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
    /*Information.c*/
    #include<stdio.h>
    #include "fpurge.h"
     
    #define MAX 500
    void information(void)
    {
    	char nom[MAX];
    	char prenom[MAX];
    	char adresse[MAX];
    	char sexe[MAX];
    	char option[MAX];
    	int age;
    	int telephone;
    	printf("\n");
     
    	printf(" Entrer votre nom : \n");
    	fgets(nom, MAX, stdin);
    	fclean(nom, stdin);
    	printf("Entrer votre prenom: \n");
    	fgets(prenom, MAX, stdin);
    	fclean(prenom, stdin);
    	printf("Entrer votre adresse: \n");
    	fgets(adresse, MAX, stdin);
    	fclean(adresse, stdin);
    	printf("Entrer votre sexe: \n");
    	fgets(sexe, MAX, stdin);
    	fclean(sexe, stdin);
    	printf("Entrer votre option: \n");
    	fgets(option, MAX, stdin);
    	fclean(option, stdin);
    	printf("Entrer votre age: \n");
    	scanf("%d",&age);
    	fpurge(stdin);
    	printf("Entrer votre telephone: \n");
    	scanf("%d",&telephone);
    	fpurge(stdin);
     
    	//creation d'un pointeur FILE
    	FILE*pointeurfichier=NULL;
    	//appel a la fonction fopen
    	pointeurfichier=fopen("Les informations des etudians.txt","w");
    	//test sur l'ouverture
    	if(pointeurfichier!=NULL)
    	{
    		fprintf(pointeurfichier,"### les informations ###\n");
    		fprintf(pointeurfichier," %s \n",nom);
    		fprintf(pointeurfichier,"%s \n", prenom);
    		fprintf(pointeurfichier,"%s \n", adresse);
    		fprintf(pointeurfichier," %s \n", sexe);
    		fprintf(pointeurfichier,"%s \n", option);
    		fprintf(pointeurfichier,"%d \n",age);
    		fprintf(pointeurfichier,"%d \n",telephone);
    		/*Note: j'ai mis le fclose() dans le printf(),
    		  parce que fclose(NULL) est un comportement indéterminé (qui plante sous Visual),
    		  contrairement à free(NULL) qui est garanti ne rien faire.*/
    		fclose(pointeurfichier);
    	}
    	else
    	{
    		printf("impossible d'ouvrir le fichier.\n");
    	}
    }
    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
    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
    /*Main.c*/
    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
    #include <time.h>
    #include "menu.h" //je rattache ma fonction affiche_menu() au main.c
    #include "information.h" //je rattache ma fonction information() au main.c
     
    int main(void)
    {
    	char ch = 0;
    	do
    	{
    		affiche_menu();//Appelle de la fct affiche_menu
    		/* On fait l'un ou l'autre, pas les deux.*/
    		ch = getch();
    		/*scanf("%c",&ch); //lecture des characteres. */
    		switch (ch)
    		{
    		case 'A':
    		case 'a':
    			printf("\n\nBienvenue sur le programme permettant de saisir des informations des etudiants\nPressez une touche quelconque");
    			information(); //j'appelle ma fonction.
    			getch();
    			break;
    		case 'B':
    		case 'b':
    			printf("\n\nBienvenue sur le Programme permettant d afficher les informations saisies au point 1\nPressez une touche quelconque");
    			getch();
    			break;
    		case 'C':
    		case 'c':
    			printf("\n\nBienvenue sur le Programme permettant de trouver la factorielle d une valeur entiere\nPressez une touche quelconque");
    			getch();
    			break;
    		case 'D':
    		case 'd':
    			printf("\n\nBienvenue sur le Programme permettant de trouver la combinaison de deux valeurs entieres");
    			getch();
    			break;
    		case 'E':
    		case 'e':
    			printf("\n\nBienvenue sur le Programme permettant de former l anagramme d un nom d une personne");
    			getch();
    			break;
    		case 'F':
    		case 'f':
    			printf("\n\nBienvenue sur le Programme permettant de changer la date de l ordinateur");
    			getch();
    			break;
    		case 'G':
    		case 'g':
    			printf("\n\nBienvenue sur le Programme permettant d eteindre l ordinateur");
    			getch();
    			break;
    		case 'H':
    		case 'h':
    			printf("\n\nBienvenue sur le Programme permettant de classer par ordre croissant et decroissant des valeurs saisis");
    			getch();
    			break;
    		default:
    			printf("\n\nVotre choix est erroné\nPressez une touche quelconque et réessayez\n");
    			getch();
    			break;
    		}
    	} while (ch != '4');
    	return 0;
    }
    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.

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Haïti

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Février 2013
    Messages : 15
    Par défaut
    Slt Medinoc, c'est super vraiment super ,mil merci ça fait très longtemps que je cherche qlq pour m'aider (2 semaines environ).

    Mais pour être sincère avec vous je ne suis pas trop claire dans vos modifications. Il me reste 6 autres programmes a mettre dans le menu. Je suis NOVIS (DÉBUTANT) en langage C. Se serait sympa de m’éclaircir.
    N.B:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    int bRet=0;
    	if(str!=NULL)
    	{
    		char *pNewline = strchr(str, '\n');//erreur ici (Newline)
    		if(pNewLine!=NULL)                   // c'etait l aulieut de L (NewLine)
    		{
    			bRet = 1;
    			*pNewLine = '\0';
    		}
    	}
    dans le code: fpurge je pirge rien du tout,explique-moi les codes svp.
    dans le code: fpurge.h, a quoi sert le _20130223
    Et enfin dans les deux autres fichier: main.c et information.c
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    /*main.c*/
    //quel sont les modifications que vous faite dans le code et pourqoui???
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    /*information.c*/
    //quel sont les modifications que vous faite et pourquoi???
    Encore une fois merci.

  7. #7
    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
    Bonjour,
    Pour la première erreur, j'ai oublié d'inclure <string.h>

    Pour le reste, en gros, ça part d'un principe: La fonction gets() ne doit pas être utilisée. Jamais.
    Alors on utilise fgets() à la place. Seulement:
    • Vu qu'on limite la longueur, il faut finir de lire la ligne si elle est plus grande que le tableau de caractères
    • fgets() ne retire pas le \n à la fin, contrairement à gets().

    Pour ça, la fonction fpurge() finit de lire la ligne. Mais il ne faut l'appeler que si on est sûr qu'elle n'a pas été lue entièrement.
    La fonction truncate_newline() cherche le \n dans le buffer, le supprime, et retourne une valeur non-nulle si elle l'a trouvé.
    La fonction fclean() met tout ça ensemble:
    • Si la ligne saisie était assez courte pour tenir dans le buffer, celui-ci contiendra le \n et il n'y aura rien d'autre à faire puisqu'elle aura été lue entièrement.
    • Dans le cas contraire, le buffer ne contiendra pas de \n, donc truncate_newline() retournera zéro, et fpurge() sera appelée pour finir de lire la ligne.


    La suite au prochain post.
    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.

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

Discussions similaires

  1. Créer un fichier d'enregistrements
    Par Oregor dans le forum Langage
    Réponses: 19
    Dernier message: 02/06/2012, 20h02
  2. Réponses: 7
    Dernier message: 26/06/2003, 09h11
  3. [] [Stratégie] Comment créer un fichier log
    Par Skeezo dans le forum Installation, Déploiement et Sécurité
    Réponses: 4
    Dernier message: 16/09/2002, 18h30
  4. Instruction pour créer un fichier text ???
    Par Soulsurfer dans le forum Langage
    Réponses: 2
    Dernier message: 06/08/2002, 11h17

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