Partage
  • Partager sur Facebook
  • Partager sur Twitter

Probleme avec mon menu qui s'affiche en double ...

Sujet résolu
17 septembre 2014 à 10:42:08

Bonjour

je rencontre un petit probleme avec mon  code :

si on tape le mot de passe  , le menu s'affiche en double , j'aimerai savoir pourquoi

merci

//On appelle les libraires du C
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
//-----------------

//On défini le nombre de caratéres que l'on peux saisir dans notre tableau
#define S_Produits (15)
#define S_Quantite (60)

//Structure pour le Nom du produit et sa quantité qu'il ya en stock .
typedef struct
{
    char nomProduits[S_Produits+1];
    char nombreProduits[S_Quantite+1];
} Fiche_Stock;
//-----------------

//Fonction qui permetant de saisir une chaine enlevant le '\'
void myGets(char*prompt,char*chaine,unsigned short size )
{
    char *pt;
    fputs(prompt,stdout);
    fgets(chaine,size,stdin);
    if((pt=strchr(chaine,'\n'))!=NULL)
        *pt='\0';

}
//Fonction pour  le menu
unsigned short menu()
{
    char saisie[100];
    unsigned short choix;
    while(1)
    {
        printf("\t****************** Bienvenu Au Grand Bazar ******************\n\n\n");
        printf("1 : Ouvrir un fichier de stockage\n");
        printf("2 : Ajouter un produit\n");
        printf("3 : Voir le stock \n");
        printf("0 :Quitter\n");
        printf("\nVotre choix : ");
        fflush(stdout);
        fgets(saisie,100,stdin);
        if (sscanf(saisie, "%hu", &choix) == 1 && choix >= 0 && choix <= 3) break;
        printf("Choix incorrect - Recommencez !!!\n");

    }

    return choix;

}
//Fonction pour ouvrir un fichier
FILE *ouvrir_fichier()
{
    char nom[100];
    char *pt;
    printf("**Ouverture du fichier**\n\n");
    myGets("Saisir un nom pour le fichier: ", nom, 100);

    // Vérification extension ".txt" n'existe pas
    if ((pt=strrchr(nom, '.')) == NULL || strcmp(pt, ".txt") != 0)
        strcat(nom,".txt");// on rajoute l'extension .txt au fichier

    return fopen(nom, "a+");
}
//Fonction pour ajouter un produit à la liste
void ajouterNom(FILE *fp)
{
    Fiche_Stock p;

    printf("Ajouter nom\n");
    myGets("Entrer un produit :", p.nomProduits, S_Produits);
    myGets("Entrer la quantite :", p.nombreProduits, S_Quantite);
    fprintf(fp, "%s:%s:%s\n", p.nomProduits, p.nombreProduits);
    fflush(fp);
    printf("enregistrement %s:%s:%s ok\n", p.nomProduits, p.nombreProduits);
}
//Fonction pour affficher le stock
void listerNom(FILE *fp)
{
    Fiche_Stock p;
    long pos;
    char ligne[100];

    // Récupération position courante
    pos=ftell(fp);

    // Positionnement au début du fichier
    fseek(fp, 0L, SEEK_SET);

    // Lecture fichier
    while (fgets(ligne, 100, fp) != NULL)
    {
        printf(ligne);
    }

    // Repositionnement à la position initiale du fichier
    fseek(fp, pos, SEEK_SET);
}
//Fonction pour afficher le menu
void afficher_menu()
{
    FILE *fp=NULL;
    unsigned short choix;
       while((choix=menu()) != 0)
	{
		switch (choix)
		{
			case 1:
				fp=ouvrir_fichier();
				if (fp == NULL)
					fprintf(stderr, "Erreur ouverture fichier\n");
				break;
			case 2:
				if (fp == NULL)
				{
					fprintf(stderr, "Il faut d'abord ouvrir le fichier\n");
					break;
				}
				ajouterNom(fp);
				break;
			case 3:
				if (fp == NULL)
				{
					fprintf(stderr, "Il faut d'abord ouvrir le fichier\n");
					break;
				}
				listerNom(fp);
				break;
			case 0:
				if (fp != NULL) fclose(fp);
		}
	}

     }




//Programme principal

int main()
{

//Mise en place d'un systeme de mot de passe
    int motpasse =77;
    int code;

do
    {
        printf("veuillez saisir le code : ");
        scanf("%d",&code);

        if(code==motpasse)
        {
            system("cls");
            afficher_menu();

        }
        else
        {
            printf("Erreur de code !!!");
        }



    }
    while(code !=motpasse);

        system("pause");

        return 0;
    }



  • Partager sur Facebook
  • Partager sur Twitter
17 septembre 2014 à 11:32:24

Merci 

mais je place où cette ligne dans mon code???

  • Partager sur Facebook
  • Partager sur Twitter
17 septembre 2014 à 11:36:27

Salut,

Après les scanf...

A+

  • Partager sur Facebook
  • Partager sur Twitter
17 septembre 2014 à 11:40:45

Merci  ça marche

-
Edité par zarus44 17 septembre 2014 à 11:42:27

  • Partager sur Facebook
  • Partager sur Twitter
17 septembre 2014 à 12:27:41

zarus44 a écrit:

Merci  ça marche

-
Edité par zarus44 il y a 44 minutes

sorry mal expliquer

  • Partager sur Facebook
  • Partager sur Twitter
3 juin 2021 à 14:14:10

C159 a écrit:

vide le buffer

while(getchar() != '\n');

MERCI  ::-)
  • Partager sur Facebook
  • Partager sur Twitter
3 juin 2021 à 14:55:57

@BakaramogoMeite Bonjour, merci de ne pas déterrer d'ancien sujet résolu; Pour dire merci pas la peine de déterrer un sujet, vous avez la possibilité de cliquer sur les pouces levés des messages qui vous ont aidés.

Déterrage

Citation des règles générales du forum :

Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.

Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre.
En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.

Au lieu de déterrer un sujet il est préférable :

  • soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
  • soit de créer un nouveau sujet décrivant votre propre contexte
  • ne pas répondre à un déterrage et le signaler à la modération

Je ferme ce sujet. En cas de désaccord, me contacter par MP.

  • Partager sur Facebook
  • Partager sur Twitter