Instruction switch
Résolu
kaima1
Messages postés
7
Date d'inscription
Statut
Membre
Dernière intervention
-
kaima1 Messages postés 7 Date d'inscription Statut Membre Dernière intervention -
kaima1 Messages postés 7 Date d'inscription Statut Membre Dernière intervention -
A voir également:
- Instruction switch
- Android switch - Accueil - Android
- Smart switch pc - Télécharger - Divers Bureautique
- Switch off - Télécharger - Divers Utilitaires
- Logiciel switch - Télécharger - Conversion & Extraction
- Switch qwerty azerty - Guide
2 réponses
Salut kaima1,
C'est dû au fait que tu as ceci dans ton bloc case 'a' :
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.
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/
fgets prend le \n dans la saisie, alors que gets ne le fait pas
Dal
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