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 -
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
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:
- Limiter la saisie à un nombre de caractères
- Saisie gestuelle iphone - Guide
- Nombre de jours entre deux dates excel - Guide
- Caractères spéciaux - Guide
- Ascii nombre de caractères - Guide
- Nombre de caractères word - Guide
5 réponses
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 ?
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 ?
"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
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
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.
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.
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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);
}
}
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);
}
}
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
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
essaye de travailler sur des nombres beacoup plus grands ou beaucoup plus petits