Controle de saisie, fgets?

Résolu
val3113 Messages postés 22 Date d'inscription lundi 23 juin 2003 Statut Membre Dernière intervention 9 juin 2007 - 21 avril 2006 à 16:22
val3113 Messages postés 22 Date d'inscription lundi 23 juin 2003 Statut Membre Dernière intervention 9 juin 2007 - 24 avril 2006 à 18:38
Bonjour, pour un travail à l'école je voudrais savoir comment controler qu'une chaine de caractere saisie par l'utilisateur ne dépasse pas le nombre de caracteres disponibles..
J'avais pensé à un truc comme ca:

void main()
{
char nom[20];

do
{
gets(nom);
}
while(strlen(nom)>20);
}

Mais malheureusement ca ne marche pas, puis même ca reste genant parceque ca prend beaucoup de place puisque je dois le faire sur pas mal de champs... j'ai entendu dire que la fonction fgets pourrait peut etre m'aider mais je ne m'en suis jamais servi, si quelqu'un peut m'aider je l'en remercie.

6 réponses

bayeto Messages postés 224 Date d'inscription mardi 12 août 2003 Statut Membre Dernière intervention 18 octobre 2010
21 avril 2006 à 19:33
un bémol: attention au sizeof sur un char []; mieux vaut directement entrer la taille du tableau.
char nom[20];
*nom = 0;
fgets(nom,20,stdin); //peut-etre meme 19... a voir le man de fgets
3
ebooserge Messages postés 137 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 16 juillet 2007 1
21 avril 2006 à 16:50
//tu peux faire un truc de ce genre
char nom[20];
char car = '\0';//variable de test
memset(nom,car,sizeof(nom));//tu remplis le buffer par des 0
int a=0;
car = getchar();//tu recupere le 1er car
while(a<sizeof(nom) && car!='\r' && car!='\n')//le \r et le \n c'est pour eviter de récupérer le retour chariot dans ta chaine de car
{
nom[a]=car;
car=getchar();
}
printf(nom);
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
21 avril 2006 à 17:42
ebooserge> à la place de faire:
char nom[20];
char car = '\0';//variable de test
memset(nom,car,sizeof(nom));

ceci suffirais:
char nom[20];
nom[0] = '\0';


ensuite pour fgets pour la console c'est ceci:


fgets (nom, sizeof(nom), stdin);

c'est important que le flux soit stdin

___________________________________________
Les plus grands esprits trouvent toujours une solution
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
21 avril 2006 à 22:34
C'est vrai mais généralement sur un tableau qui n'est pas un paramètre de fonction, ya pas beacoup de danger.

___________________________________________
Les plus grands esprits trouvent toujours une solution
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
val3113 Messages postés 22 Date d'inscription lundi 23 juin 2003 Statut Membre Dernière intervention 9 juin 2007
21 avril 2006 à 23:02
j'regarde tout ca demain soir des que j'ai le temps, merci de votre aide
0
val3113 Messages postés 22 Date d'inscription lundi 23 juin 2003 Statut Membre Dernière intervention 9 juin 2007
24 avril 2006 à 18:38
Merci bien ca marche

fgets(nom,20,stdin); // 20 ou sizeof(nom) nom etant un char[20]

Il semblerait cependant que je n'ai pas besoin d'initialiser le 1er caractere de nom à 0 ou \0

Le code que j'ai mis en vert, a lui seul permet de lire le nom, comme gets à lexcepion que si l'utilisateur entre 150 caracteres au lieu de 20, le programme ne plante pas et n'accepte que les 19 (+0 defin de chaîne) premiers caracteres saisis.

Merci de votre aide :)
0
Rejoignez-nous