Mon problème est que lorsque je crée un menu si je tape 1 j’accède bien a la suite de mon programme, mais des que je tape 2 pour accéder a "crée un fichier " mon menu réapparait et me redemande de choisir une deuxième fois avant d’accéder a la suite du programme, si je tape 3 pour accéder a "Écrire dans un fichier" mon menu apparait 3 fois avant de passez a la suite du programme et si je rajoute une 4éme option dans le menu il réapparait 4 fois etc...
Ce n'est pas la première fois que j'ai ce problème et je ne comprend pas pourquoi il ne passe pas direct a la suite du programme sauf quand je choisis "1".
J’espère avoir bien réussit a expliquer mon problème, et merci a ce qui pourront m'aider.
#include <stdlib.h>
#define TAILLE_MAX 1000
int menu(int choix);
int programme();
int main()
{
programme();
return 0;
}
int menu(int choix)
{
printf("1. Lire un fichier\n");
printf("2. Cree un fichier\n");
printf("3. Ecrire dans un fichier\n");
printf("Votre choix : ");
scanf("%d", &choix);
return choix;
}
int programme()
{
int choix = 0;
if(menu(choix) == 1)
{
char text[TAILLE_MAX] = "";
FILE *fichier = NULL;
fichier = fopen("text.txt", "r");
if(fichier != NULL)
{
fgets(text, TAILLE_MAX, fichier);
printf("%s", text);
}
fclose(fichier);
}
else if(menu(choix) == 2)
{
char text[TAILLE_MAX];
FILE *fichier = NULL;
fichier = fopen("text2.txt", "w");
printf("le fichier a etais crée.\n");
printf("que souhaitait vous ecrire dans ce fichier : ");
scanf("%s", &text);
fprintf(fichier, "%s", text);
fclose(fichier);
}
else if(menu(choix) == 3)
{
char text[TAILLE_MAX];
FILE *fichier = NULL;
fichier = fopen("text3.txt", "w");
printf("Que souhaitait vous ecre dans le fichier text3.txt : ");
scanf("%s", &text);
fprintf(fichier, "%s", text);
fclose(fichier);
}
return 0;
}
Tu initialises choix à 0. Ligne 29 tu rentres dans ton if et dans ta fonction menu, si tu choisis 1 ton if est vérifié donc le programme ne passera pas aux else.
Si tu choisis 2 : ligne 29 tu rentres dans le if puis ta fonction menu, tu entres 2 donc
if(menu(choix) == 1)
n'est pas vérifié -> tu passes ensuite au else if(menu(choix)==2) et donc ton menu sera ré affiché.
Pour résoudre ton problème ce n'est pas compliqué, il te suffit de faire un switch(menu(choix)) avec les cas voulus.
Merci a tous, j'ai essayer les 2 solution (if et switch) j'ai réussi a régler mon problème en utilisant if et else comme expliquer plus haut mais quand j'utilise switch une erreur apparait a la déclaration
char text[TAILLE_MAX] = "";
Pourtant je pense bien déclarer mon switch et il n'y a pas ce problème quand j'utilise if else
int menu()
{
int choix = 0;
printf("1. Lire un fichier\n");
printf("2. Cree un fichier\n");
printf("3. Ecrire dans un fichier\n");
printf("Votre choix : ");
scanf("%d", &choix);
return choix;
}
int programme()
{
int choix = 0;
choix = menu();
switch(choix == 1)
{
case 1:
char text[TAILLE_MAX] = "";
FILE *fichier = NULL;
fichier = fopen("text.txt", "r");
if(fichier != NULL)
{
fgets(text, TAILLE_MAX, fichier);
printf("%s", text);
}
fclose(fichier);
break;
case 2:
//code
break;
etc...
Quand je fait ce code en if sa marche mais en switch --error expected expression before 'FILE'
Désole si la réponse peut vous paraitre évidente mais j'aimerais bien comprendre pour ne pas avoir ce problème a chaque fois.
Si tu compiles en c89, il est normal d'avoir cette erreur. Ne sachant pas quel compilateur tu utilises, pour régler ce problème, mets une { en fin de ligne 22 et une } en ligne 36.
Tu vas devoir revoir le principie du switch: que penses-tu que fait switch(choix==1) ?
- Edité par edgarjacobs 23 février 2018 à 17:45:24
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
Tu vas devoir revoir le principie du switch: que penses-tu que fait switch(choix==1) ?
merci pour ta réponse c'est bien cela en rajoutant les { en ligne 22 et } en ligne 36 tout fonctionnent comme prévue c'est parfait
Et pour ce qui est du switch l'erreur vient de quand j'ai copié le code ici j'ai bien écrit dans mon code :
switch(choix)
et non pas :
switch(choix == 1)
- Edité par moitoi39 23 février 2018 à 18:06:29
Menu se repete plusieur fois
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
Ton présent détermine ton futur et la connaissance te placera au dessus de ta génération .
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent