Instruction switch

Résolu/Fermé
kaima1 Messages postés 7 Date d'inscription jeudi 28 février 2013 Statut Membre Dernière intervention 6 mars 2013 - 28 févr. 2013 à 03:35
kaima1 Messages postés 7 Date d'inscription jeudi 28 février 2013 Statut Membre Dernière intervention 6 mars 2013 - 3 mars 2013 à 03:04
Bonjour,

Bonjour,
g cree mon programme genre tranquille ca fonctionnait normalemnt l'instruction switch mais au fur et a mesure que je rajoute des commandes ca a changer.
le vrai probleme c que : JE DOIS TAPER A or a deux fois pr que ca apparait et ceci "ENTER" ensuite pr que la commande s'excecute tandis que les autres : b, c d ... fonctionne normalemnt. des que je tape b, c correcte pas besoin d'entrer ca 2 fois comme "a".

VOICI MON DEVOIR :

int main()
{
char menu;
do


{

printf("A..........permet de saisir des informations des etudiants dans un fichier word\n");
printf("B..........permet d'affficher des informations saisies au point 1\n");
printf("C..........Permet de trouver la factorielle d'une valeur enti%cre\n",138);
printf("D..........Permet de trouver la combinaison de deux valeurs enti%cres\n",138);
printf("E..........Permet de former l'anagramme d'un nom d'une personne quelconque\n");
printf("F..........Permet de changer la date de l'ordinateur sur lequel le programme s'execute\n");
printf("G..........Permet d'%cteindre l'ordinateur\n",130);
printf("H..........Permet de classer par ordre croissant et decroissant un ensemble de valeurs saisis par un utilisateur\n");
printf("I..........Permet Convertir Fahrenheit en Celcius \n");

printf("\n");
printf("\n");
printf("---------------------------------------------------------------------");
printf("\n");
printf("\n");

menu=getch();
switch(menu)
{
case 'a':
case 'A':
{
char nom[max];
char prenom[max];
char adresse[max];
char age[max];
char option[max];
char sexe[max];
char telephone[max];
printf("");
gets(nom);
printf("entrez votre nom\n");
gets(nom);
printf("entrez votre prenom\n");
gets(prenom);
printf("entrez votre adresse\n");
gets(adresse);
printf("entrez votre age\n");
gets(age);
printf("entrez votre option\n");
gets(option);
printf("entrez votre sexe\n");
gets(sexe);
printf("entrez votre telephone\n");
gets(telephone);
//creation d'un pointeur FILE
FILE *pointeur=NULL;
//appel a la fonction fopen
pointeur=fopen("Information.doc", "a+");
//test sur l'ouverture
if(pointeur!=NULL)
{
fprintf(pointeur, "### vos informations ###\n\n");
fprintf(pointeur, "NOM:%s\n", nom);
fprintf(pointeur, "PRENOM:%s\n", prenom);
fprintf(pointeur, "ADRESSE:%s\n", adresse);
fprintf(pointeur, "AGE:%s\n", age);
fprintf(pointeur, "OPTION:%s\n", option);
fprintf(pointeur, "SEXE:%s\n", sexe);
fprintf(pointeur, "TELEPHONE:%s\n", telephone);
}
else
{
printf("probleme d'ouverture");
}
printf("\n");
printf("\n");
printf("---------------------------------------------------------------------");
printf("\n");
printf("\n");
fclose(pointeur);
}//fin case 1
break;

case'b':
case'B':
{
//lire le contenu du fichier

FILE *pointeur1=NULL;
pointeur1=fopen("Information.doc", "r");
char temp[max];
if(pointeur1!=NULL)
{
while(fgets(temp, max, pointeur1)!=NULL)
{
printf("%s\n", temp);
}

}
else
{
printf("pas de fichier");
}
fclose(pointeur1);
printf("\n");
printf("\n");
printf("---------------------------------------------------------------------");
printf("\n");
printf("\n");
}//fin case b
break;


case 'c':
case 'C':
factoriel();

//Fin case C

break;

case 'd':
case 'D':
{
int nbr1,nbr2;
do
{
printf("----Entrez la valeur de P\n");
scanf("%4d",&nbr1);
printf("----Entrez la valeur de N\n");
scanf("%4d",&nbr2);
}
while((nbr1<0)&&(nbr2<0));
if(nbr1>nbr2)
{
printf("---------------------------------------------------------------------\n");
printf("RAPPEL:P doit etre inferieur ou egal a N\n");
}
else
{
printf("La combinaison de %d dans %d est : %d\n", nbr1,nbr2,combinaison(nbr2,nbr1));

}

printf("\n");
printf("\n");
printf("---------------------------------------------------------------------");
printf("\n");
printf("\n");

}
break;

case 'e':
case 'E':

{
int i,n;
char name[max];
printf("Entrez le nom dont vous voulez trouver l'anagramme\n");
scanf("%s",&name);
printf("\n l'anagramme de ce mot est: ");
n=strlen(name);
for(i=n-1; i>=0; --i)
{
printf("%c",name[i]);
}
printf("\n");
printf("\n");
printf("---------------------------------------------------------------------");
printf("\n");
printf("\n");

}

break;

case 'f':
case 'F':
{
system("date");

printf("\n");
printf("\n");
printf("---------------------------------------------------------------------");
printf("\n");
printf("\n");
}

//Fin case f

break;

case 'g':
case 'G':
{
eteindre();
printf("\n");
printf("\n");
printf("---------------------------------------------------------------------");
printf("\n");
printf("\n");
}



break;

case 'h':
case 'H':
{
int n,i,j,t;
//partie des nombres croissants

printf("\n entrer le nbre de valeur\n");
scanf("%d",&n);
int v[n];
for(i=0; i<n; i++)
{
printf("entrer element :%d\n",i+1);
scanf("%d",&v[i]);
}
//affichage du tableau non trie
for(i=0; i<n;i++)
printf("%d",v[i]);
for(i=0; i<n-1; i++)
for(j=i+1; j<n; j++)
{
if(v [i]>v[j])
{
t=v[i];
v[i]=v[j];
v[j]=t;
}

}
printf("\n\ntri par ordre croissant\n");
for(i=0;i<n;i++)
printf("%d\t",v[i]);


for(i=0; i<n-1; i++)
for(j=i+1; j<n; j++)
{
if(v [i]<v[j])
{
t=v[j];
v[j]=v[i];
v[i]=t;
}

}
printf("\n\n\ntri par ordre d%ccroissant\n",130);
for(i=0;i<n;i++)
printf("%d\t",v[i]);

printf("\n");
printf("\n");
printf("---------------------------------------------------------------------");
printf("\n");
printf("\n");
}

break;


case 'i':
case 'I':
{

float vf;

{
printf("entrer la valeur Fahrenheit\n");
scanf("%f",&vf);
}
float celcius;



{
celcius=5*(vf-32)/9;
printf("%f Fahrenheit en celcius donne %f\n", vf, celcius);

}
printf("\n");
printf("\n");
printf("---------------------------------------------------------------------");
printf("\n");
printf("\n");
}
break;
}//fin switch
}while((menu=='a')||(menu=='A')||(menu=='b')||(menu=='B')||(menu=='c')||(menu=='C')||(menu=='d')||(menu=='D')||(menu=='e')||(menu=='E')||(menu=='f')||(menu=='F')||(menu=='g')||(menu=='G')||(menu=='h')||(menu=='H')||(menu=='i')||(menu=='I')) ;
}





A voir également:

2 réponses

[Dal] Messages postés 6184 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 29 mai 2024 1 087
28 févr. 2013 à 10:01
Salut kaima1,

C'est dû au fait que tu as ceci dans ton bloc case 'a' :

            printf("");
            gets(nom);
            printf("entrez votre nom\n");
            gets(nom);


Le premier printf ne sert à rien, car il n'affiche rien, et le gets qui suit duplique l'autre.

Les deux lignes en gras sont à supprimer.

Je n'ai pas tout analysé, mais il y a au moins aussi ces autres problèmes dans ton code :

scanf("%s", &name); devrait être scanf("%s", name); car name est déjà un pointeur (sur char).

ta fonction main est déclarée comme étant de type int main(void) elle doit donc retourner un entier.

return 0;
à la fin de ton code terminera le programme avec un code de retour signifiant que l'exécution s'est terminée normalement.

Le contrôle d'erreurs est très sommaire, voire absent. Il est très dangereux d'utiliser gets (ou scanf d'ailleurs) sur des variables d'une certaine dimension, sans t'assurer que l'utilisateur ne saisit pas un nombre de caractères dépassant la taille de mémoire allouée.

En fait gets est dangereux et ne devrait pas être utilisé, même dans des conditions très maîtrisées.

Pour une saisie sécurisée de texte au clavier, tu peux utiliser fgets, qui te permet de préciser la taille maximale de saisie acceptable, et de travailler sur le flux standard stdin.

http://www.cplusplus.com/reference/cstdio/fgets/

    char buf[BUFSIZ];   /* pour récupérer la chaîne saisie */
    char *p;            /* pointeur sur l'éventuel \n récupéré */

    printf ("taper du texte (%d caractères au plus)\n", sizeof(buf));

    if (fgets(buf, sizeof(buf), stdin) != NULL)
    {
        /* à ce stade, on a récupéré la saisie, et 
         * fait en sorte qu'elle ne dépasse pas la 
         * taille du tampon. Cependant, la saisie 
         * comprend aussi \n (à moins que l'on ait 
         * exactement tapé sizeof(buf) caractères
         * comme le montre printf ici */
        printf ("J'ai récupéré ceci [%s]\n", buf);

        /* par conséquent, pour éviter de conserver 
         * un éventuel \n, on doit en vérifier l'existence
         * et le neutraliser. On le fait en l'écrasant 
         * avec \0, qui terminera la chaîne C à cet endroit
         */
        if ((p = strchr(buf, '\n')) != NULL)
            *p = '\0';

        printf ("Désormais, j'ai ceci [%s]\n", buf);
    }

fgets prend le \n dans la saisie, alors que gets ne le fait pas


Dal
0
kaima1 Messages postés 7 Date d'inscription jeudi 28 février 2013 Statut Membre Dernière intervention 6 mars 2013
3 mars 2013 à 03:04
thx so much
0