[C] comment effectuer bonne saisie ?

Résolu/Fermé
jerémiethe7 Messages postés 152 Date d'inscription dimanche 2 décembre 2007 Statut Membre Dernière intervention 27 février 2009 - 10 avril 2008 à 15:53
jerémiethe7 Messages postés 152 Date d'inscription dimanche 2 décembre 2007 Statut Membre Dernière intervention 27 février 2009 - 10 avril 2008 à 17:19
Bonjour,

j'ai essayé toute l'apres-midi de faire une bonne saisie. Je demande un prenom à l'utilisateur et il me l'entre.
J'ai une taille fixe de 30 caractères dans ma chaine + 1 pour le '\0'.
j'ai essayé avec un scanf mais ça ne marche pas car si on reste appuyé comme un déjantésur le clavier ça affiche un message d'erreur.
Du coup j'ai eu l'idée d'examiner caractère par caractère. voici ce que j'ai fait :

do
{
printf("Entrer leprenom de la personne ( < a 30 caracteres ):\n");
while (lettre!=13&&strlen(tampon)<=taille_recue+1)
{ lettre=getch();
tampon[i]=lettre;
if(lettre!=8 || lettre!=-32) // caractère ascii de backspace et touche de gauche
i++;
else
i--;
printf("%c",lettre);
}
tampon[i]='\0';
fflush(stdin);
}while(strlen(tampon)>=(taille_recue+1));

voilà j'espère que quelq'un pourra m'aider, ce que je recherche, cest bien comment ne pas faire "beugger" une demande.

Merci d'avance!!

3 réponses

mype Messages postés 2435 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 436
10 avril 2008 à 16:31
c'est quoi le probleme ? quel bug tu as ?
0
tatou_38 Messages postés 1928 Date d'inscription vendredi 21 avril 2006 Statut Membre Dernière intervention 5 août 2015 120
10 avril 2008 à 16:32
char toto[31];

sscanf( "%30s" , toto );

==> Tu ne pourras pas saisir plus de 30 caractères !


tu peux même faire :

sscanf( "%*s" , sizeof(toto)-1 , toto );

cela t'éviteras de modifier ton code le jour on tu redimesionneras toto.
0
jerémiethe7 Messages postés 152 Date d'inscription dimanche 2 décembre 2007 Statut Membre Dernière intervention 27 février 2009 32
10 avril 2008 à 16:49
ah merci ça marche du tonerre cette petite feinte.

En faite mype, je cherchait à ne pas avoir de beug suite a des pointeurs de caractères qui allait dépasser le nb de caractères max.

Merci tatou !!
0
jerémiethe7 Messages postés 152 Date d'inscription dimanche 2 décembre 2007 Statut Membre Dernière intervention 27 février 2009 32
10 avril 2008 à 17:01
c'est bizarre quand je regarde après ce qu'il y a dans mes varaibles ,il y a plein de lettres bizarres, pas du tout ce que j'ai écris.

??
0
mype Messages postés 2435 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 436
10 avril 2008 à 16:56
a ok je vois...
sinon tu as aussi
fgets(tampon,30,stdin);

comme ça t'es sur de ne rentré que 30 caracteres
0
jerémiethe7 Messages postés 152 Date d'inscription dimanche 2 décembre 2007 Statut Membre Dernière intervention 27 février 2009 32
10 avril 2008 à 17:12
ok par contre le dernier caractère de la chaine doit être un "entrée" car quand j'imprime ces chaines dans un txt elles sont maintenant toutes sur des lignes diférentes

ou alors c moi qui me plante ??
0
jerémiethe7 Messages postés 152 Date d'inscription dimanche 2 décembre 2007 Statut Membre Dernière intervention 27 février 2009 32 > jerémiethe7 Messages postés 152 Date d'inscription dimanche 2 décembre 2007 Statut Membre Dernière intervention 27 février 2009
10 avril 2008 à 17:19
ooplà, c'était moi ^^
scuse et merci mype
0