val3113
Messages postés22Date d'inscriptionlundi 23 juin 2003StatutMembreDernière intervention 9 juin 2007
-
21 avril 2006 à 16:22
val3113
Messages postés22Date d'inscriptionlundi 23 juin 2003StatutMembreDerniè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.
bayeto
Messages postés224Date d'inscriptionmardi 12 août 2003StatutMembreDernière intervention18 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
ebooserge
Messages postés137Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention16 juillet 20071 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);
val3113
Messages postés22Date d'inscriptionlundi 23 juin 2003StatutMembreDerniè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.