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
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
A voir également:
- Instruction switch
- Logiciel switch - Télécharger - Conversion & Extraction
- Samsung switch pc - Télécharger - Divers Bureautique
- L'instruction a 0x emploie l'adresse memoire - Astuces et Solutions
- Switch qwerty azerty - Guide
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
28 févr. 2013 à 10:01
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
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
3 mars 2013 à 03:04
thx so much