Limiter la saisie à un nombre de caractères

0nn2belle Messages postés 17 Statut Membre -  
fiddy Messages postés 11653 Date d'inscription   Statut Contributeur Dernière intervention   -
Salut tout le monde ! Je vous présente mon premier post, et sûrement pas le dernier ^^

Alors je vous explique mon problème, j'ai un projet en cours dans lequel je dois faire un jeu en C, enfin tout un tralala quoi, et je desespere car je ne trouve pas comment limiter la saisie au clavier de caractères.

Plus clairement, quand je lance mon .exe, l'ordinateur me demander un nom pour mes personnages et je veux limiter leur nom à 20.
Mais ce qui me pose problème c'est que je ne veux pas seulement limiter, je veux aussi que le curseur se bloque au bout de 20 caractères.
J'ai fait de nombreuses recherches, j'ai trouvé certains points intéressant au niveau du fgets, getc ou strncpy mais rien de très concluant

Donc si vous avez quelques idées, je suis ouverte à tout !
Merci

Annabelle
A voir également:

5 réponses

0nn2belle Messages postés 17 Statut Membre 1
 
Aussi, j'ai un autre problème, je crée un nombre aléatoire
Mais le problème c'est qu'il est aléatoire qu'en fonction de l'horloge, donc si j'exécute le chiffre aléatoire rapidement et plusieurs fois, j'obtiens toujours le même chiffre.

Comment puis-je faire pour qu'il soit vraiment aléatoire à chaque exécution ?
1
dna.factory Messages postés 19687 Date d'inscription   Statut Modérateur Dernière intervention   1 619
 
malheureusement, l'aléatoire n'existe pas sur informatique
essaye de travailler sur des nombres beacoup plus grands ou beaucoup plus petits
0
dna.factory Messages postés 19687 Date d'inscription   Statut Modérateur Dernière intervention   1 619
 
"Donc si vous avez quelques idées, je suis ouverte à tout ! "
hum.. tu sais que tu es sur un forum de geek, c'est a dire que 90% des utilisateurs sont des mecs célibataires en manque qui n'ont jamais vu une fille en vrai
donc fais attention aux termes que tu utilise :p

pour ta méthode, mes souvenirs de C sont trop loins pour trouver une solution propre utilisant des commandes spécifiques
ce que je peux te proposer par contre, c'est de tricher en utilisant une commande pour saisir une lettre sans avoir besoin de la valider (de mémoire, je sais que ça existe)
et d'utiliser une boucle limité à 20 ou tu saisie une lettre, tu la store dans un tableau, tu l'affiche et tu décale ton curseur
en gros, au lieu d'effectuer une saisie, tu en fait 20, en utilisant la touche entrée comme caractère de sortie de boucle

la limitation de cette méthode, c'est qu'elle rend l'utilisation de la touche backspace très difficle (mais pas ingérable)
l'autre difficultée, c'est qu'il faut traiter les touche entrée et backspace
1
toto
 
Bonjour

Normalement il n'y a pas de problème pour générer des nombres aléatoires en c. Tu utilises srand la première fois pour démarrer une séquence aléatoire, puis rand qui te rend des nouveaux nombres aléatoires même si les appels sont très rapprochés.
Bien sûr, ce ne sont pas de nombres réellement aléatoires, mais l'illusion est suffisante pour la plupart des applications pratiques.
1
fiddy Messages postés 11653 Date d'inscription   Statut Contributeur Dernière intervention   1 847
 
Salut
Effectivement, tu vas avoir des problèmes sur les aléas en C en lançant plusieurs fois à intervalle très réduit ton code puisque sa graine se base sur time(NULL). Mais, sauf cas spécial, je pense pas que l'utilisateur lancera ton programme de cette façon. Sinon, si ça te gène, il y a toujours possibilité de faire une pause à l'entrée de ton programme (bidouille moche ^^) ou alors d'utiliser des suites générateurs de pseudo aléatoires. Mais bon, je suis pas sûr que ça soit très utile.

Pour bloquer le curseur comme tu veux. Cela sera très compliqué, puisque ce n'est pas le domaine du C mais plutôt de ton OS. Donc ton code ne sera pas portable et il faudra utiliser les API systèmes qui vont compliquer allègrement ton code. Le mieux est d'utiliser strncpy, cela ne bloquera pas le curseur, mais tu n'auras que 20 caractères maximum dans ta chaîne et cela évitera bien des surprises. Les autres caractères seront oubliés (enfin à condition de vider le buffer clavier).

Cdlt
1

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

Posez votre question
samar83 Messages postés 69 Statut Membre 2
 
pour l'aléatoire essaye d'ajouter la commande srand(GetTickCount()) et n'oublie pas de transporter la biblio <windows.h>, si votre commande rand est dans une boucle la commande srand(GetTickCount()) doit être en dehors de la boucle!
exple:
donner 10 nbre aléatoires entre 1 et 100 différent de 50:
# include <stdio.h>
# include <windows.h>
main()
{
int i;
for(i=0;i<10;i++)
{int n;
srand(GetTickCount());// avant la boucle repeter jusqu'à
do
{
n=rand()%100 + 1;
}while(n==50);
printf("%d",n);
}
}
1
fiddy Messages postés 11653 Date d'inscription   Statut Contributeur Dernière intervention   1 847
 
Salut
srand() n'est à appeler qu'une seule fois. Ca sert à rien de l'appeler plusieurs fois, et c'est même déconseillé sinon cela conduit à des statistiques biaisées.
De plus, lorsqu'on utilise rand() on n'utilise pas le modulo pour le ramener à un intervalle car l'opération porte sur les bits faibles. Il faut utiliser la division (RAND_MAX) pour agir sur les bits de poids forts, sinon le partage ne sera pas équiprobable.
Et enfin, inclure la bibliothèque windows.h fait que le code n'est plus portable. Ce qui est dommage pour du C.
Cdlt
0