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 :

Problème de fichier et de 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
    Octobre 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 20
    Par défaut Problème de fichier et de menu
    Bonjour,

    Voilà mon code, il y a un bug quand il relance le menu, il l'affiche 2fois, autre problème, j'aimerais si je peux jouer avec des fonctions ou procédures sur les fichiers
    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <sys/wait.h>
    #include <unistd.h>
    #include <sys/types.h>
    #include <string.h>
     
     
    void menu ();
     
     
     
    int main (int argc, char * argv[]){
     
    char fichier_Ndat[20] = "entier.dat";
    FILE * fichier_dat;
     
     
     
        char c = ' ';
        while (1){
    		int i;
     
    		menu();
            c = tolower(getchar());
     
            switch (c) {
     
    			case 'f' :
    			printf("\033[H\033[2J");
    			printf ("Nommer le fichier\n");
    			char nouveau_nom[10];
    			scanf("%s.dat", &nouveau_nom);
    			rename(fichier_Ndat, nouveau_nom);
    			break;
     
                case 'c' :
    			printf("\033[H\033[2J");
    			printf ("Remplissage du fichier binaire avec 100 int aléatoire\n");
    			if ((fichier_dat = fopen(fichier_Ndat,"wb"))==NULL) {
    			perror("Write "); 
    			exit(1);
    			}			
    			int u;
    			for (i=0;i<100;i++){
    			//fread (&u, sizeof (int),1,fichier_alea);
    			u = random() % 1000+1;
    			fwrite(&u,sizeof(int),1,fichier_dat);
    			}
    			fclose(fichier_dat);
    			break;
     
    			case 'a' :
    			printf("\033[H\033[2J");
    			printf ("Lecture du fichier binaire de 100 int aléatoires\n");
    			if ((fichier_dat = fopen(fichier_Ndat,"rb"))==NULL) {
    			perror("Read "); 
    			exit(1);
    			}
    			i=0;
     
    			//while (fgets(&u, 8, fichier_dat) != NULL) {// On lit le fichier tant qu'on ne reçoit pas d'erreur (NULL)
            	while (fread(&u,(sizeof(int)/4),1,fichier_dat)){
    			printf("N%d: %x\n",i++,u);
    			}
    			fclose(fichier_dat);
    			break;
    			case 'd' :
    				printf("\033[H\033[2J");
    			printf ("Lecture du fichier binaire de 100 int aléatoires\n");
    			if ((fichier_dat = fopen(fichier_Ndat,"rb"))==NULL) {
    			perror("Read "); 
    			exit(1);
    			}
    			i=0;
    			while (fread(&u,sizeof(int),1,fichier_dat)){
    			printf("N%d: %d\n",i++,u);
    			}
    			fclose(fichier_dat);
    				break;
    			case 'e' :
    				printf("\033[H\033[2J");
    			printf ("Lecture du fichier binaire de 100 int aléatoires\n");
    			if ((fichier_dat = fopen(fichier_Ndat,"rb"))==NULL) {
    			perror("Read "); 
    			exit(1);
    			}
    			i=0;
    			while (fread(&u,sizeof(int),1,fichier_dat)){
    			printf("N%d: %x\n",i++,u);
    			}
    			fclose(fichier_dat);
    				break;
    			case 'k' :
    				printf("\033[H\033[2J");
    				remove(fichier_Ndat);
    				break;
    			case 'q' : //Fin = vrai;
    			//break;
    			exit(0);
                default: break;
                }
        } 
     
    exit(0);
     
    }
     
    void menu (){
    		printf ("----\n");
            printf ("Menu\n");
            printf ("----\n\n");
    		printf ("\tF:  Nommer le fichier\n");
    		printf ("\tC:  Créer un fichier binaire contenant 100 int aléatoires\n");
    		printf ("\tA:  Afficher le fichier en hexadécimal, octet par octet\n");
    		printf ("\tE:  Afficher le fichier en hexadécimal, entier par entier\n");
    		printf ("\tD:  Afficher le fichier en décimal, entier par entier\n");
    		printf ("\tK:  Détruire le fichier\n");
            printf ("\tQ:  quitter\n");
    		printf ("----\n\n");
            printf ("Entrez votre choix: "); 
    }

  2. #2
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    - Ton code est illisible à cause d'une indentation fluctuante et hazardeuse.

    - Pour ton problème :

    1- Lorsqu'on arrive au getchar(), tu vas entrer au clavier un caractère suivi d'un <return>. Le getchar() lit le caractère et laisse le '\n' dans le buffer clavier.

    2- En sortie du switch, il affiche à nouveau le menu normalement, mais le getchar() lit le '\n' en attente (ce qui ne réclame pas d'entrée supplémentaire au clavier), on fait le case defaut et on sort du switch

    3- Alors il affiche une deuxième fois le menu, et comme le buffer clavier est vide, on recommence en (1) : le getchar() attend cette fois une entrée de l'utilisateur...

  3. #3
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Faire un while(1) puis un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    case 'q' : //Fin = vrai;
    //break;
    exit(0);
    Pour quitter n'est pas une très bonne idée, autant faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    while(c != 'q')
    {
     
     
    }
    De plus ton main fait plus de 100 lignes.
    Tu gagnerais en lisibilité si tu faisais plus de fonctions.

    Par exemple, le main pourrait s'occuper de faire une simple boucle avec l'appel de menu() en début de boucle puis faire le switch pour appeler la fonction appropriée selon le choix de l'utilisateur.

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 20
    Par défaut
    merci déjà pour ta réponse. Est-ce qu'on peut passer le fichier à une fonction

  5. #5
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Bien sûr : void maFonction(FILE * file);

Discussions similaires

  1. [Delphi 3] Problème avec fichier ressource .RES
    Par delphim dans le forum EDI
    Réponses: 2
    Dernier message: 28/06/2005, 18h11
  2. [Servlet] Probléme écriture fichier
    Par hedgehog dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 23/05/2005, 15h17
  3. Problème lecture fichier en C++
    Par cali1983 dans le forum C++
    Réponses: 17
    Dernier message: 20/05/2005, 09h36
  4. Problème ouverture fichier par double clic...
    Par sankookai dans le forum MFC
    Réponses: 4
    Dernier message: 11/05/2005, 09h13
  5. Problème avec fichier texte
    Par jpdelx dans le forum ASP
    Réponses: 7
    Dernier message: 13/11/2003, 13h17

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