Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1590 connectés 

  FORUM HardWare.fr
  Programmation

  [C] empecher une erreur de frappe...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] empecher une erreur de frappe...

n°30774
Texla
Posté le 11-05-2001 à 15:08:13  profilanswer
 

helloooooo
 
j'aimerais savoir comment faire pr ne recuperer apres une frappe clavier que les numeros de 5 a 15  mais je sais pas faire la condition...
voila a quoi j'ai pensé...  
 
printf("tapez un numero de 5 a 15" );
scanf("%d",c);
 
while(condition)
{
printf("erreur de frappe, entrez un numero compris entre 5 et 15" );
scanf("%d",c);
}

 
 
 :jap:

 

[edit]--Message édité par Texla--[/edit]


---------------
-
mood
Publicité
Posté le 11-05-2001 à 15:08:13  profilanswer
 

n°30783
kill9
Il a été tué vivant.
Posté le 11-05-2001 à 15:22:43  profilanswer
 

Avant toute chose, ton scanf() contient une erreur.
c'est pas scanf(%d", c) mais scanf("%d", &c). pourquoi &: pour indiquer de ranger la valeur dans l'adresse de la variable c.
voici ton prog.
 
void main(void)
{
 int iNumero;
 
 printf("Tapez un numéro de 5 à 15: " );
 scanf("%d", &iNumero);
 
 while (iNumero < 5 || iNumero > 15)
 {
  printf("Erreur de frappe, entrez un numero compris entre 5 et 15" );
  scanf("%d", &iNumero);
 }
 
 printf("Vous avez tapez le numero %d", iNumero);
}

n°30787
Texla
Posté le 11-05-2001 à 15:25:32  profilanswer
 

Merci  :jap: kill9  :jap:  
 
Pr le scanf je sais ce foutu & je l'oublie tjrs !!  
 
Je vais essayer  :)   :benetton:  :jap:


---------------
-
n°30792
kill9
Il a été tué vivant.
Posté le 11-05-2001 à 15:36:53  profilanswer
 

Gloups, j'ai oublier les includes et le retour chariot du 2eme printf().
desole.
 
#include <stdio.h>
#include <stdlib.h>
 
void main(void)
{
int iNumero;
   
printf("Tapez un numéro de 5 à 15: " );
scanf("%d", &iNumero);
   
while (iNumero < 5 || iNumero > 15)
{
  printf("\nErreur de frappe, entrez un numero compris entre 5 et 15: " );
  scanf("%d", &iNumero);
}
   
printf("Vous avez tapez le numero %d", iNumero);
}
 
 
voila.
Pour les variables, puisque tu debutes, prends l'habitude des les nommer de facon a ce que si ton prog faisait 2000 lignes tu saches de quelles variable il sagit, puis tu rajoute la notation hongroise.C'est initiale du type de la variable.
ex:"i" pour "int" puis majuscule a chaque mot.
ex 2:
int iVariableNumerique;
int iCompteur;

n°30796
Aricoh
gentil mais fo po pousser
Posté le 11-05-2001 à 15:45:41  profilanswer
 

Fais un test en tapant 5.5 dans ton programme
 
A mon avis, il va planter, ça me l'a déjà fait sur le même genre de code
 
il faut employer un atoi (ascii to int) pour la récupération de la saisie
 
Et ça, ça marche du feu de dieu !


---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO -> Google Pixel 9 PRO XL
n°30801
kill9
Il a été tué vivant.
Posté le 11-05-2001 à 15:50:41  profilanswer
 

Gloups (le Retour).
 
même pas fais gaffe a ca...puff....ok je pars m'acheter le C pour les Nulls

n°30916
Texla
Posté le 11-05-2001 à 17:23:25  profilanswer
 

Aricoh a écrit a écrit :

Fais un test en tapant 5.5 dans ton programme
A mon avis, il va planter, ça me l'a déjà fait sur le même genre de code
il faut employer un atoi (ascii to int) pour la récupération de la saisie
Et ça, ça marche du feu de dieu !




 
Je sais pas faire ca....
En fait le real problem c'est que je veux empecher toutes les erreurs de frappes... caracteres et touches genre F1 a F12...
 
>> kill9 pas mal la notation hongroise ...


---------------
-
n°30955
Aricoh
gentil mais fo po pousser
Posté le 11-05-2001 à 18:39:54  profilanswer
 

ok, voici un extrait du code avec fonction atoi
 
char buffer[3];
int nombre;
do
{
    printf ("Un nombre entre 5 et 15 SVP : " );
    fgets (buffer, 3, stdin);
    nombre = atoi(buffer);
} while (nombre < 5 || nombre > 15);

 
détails : tu déclare un petit tableau qui récupère la saisie telle qu'elle est, de l'int ou du char ou ce que tu veux, peu importe
 
fgets (buffer .....), c'est la récupération de la saisie dont je parle, tu ne récupères que (2+1) caractères (+1 pour le '\0'), le surplus va dans stdin, ça n'est pas pris en cpte dans ton prog'
 
nombre = atoi(buffer)
là, ça renvoit (si le contenu de buffer est un int) dans nombre la valeur numérique
 
si le type tape pour rigoler 'cc', la fonction atoi va retourner 0 dans nombre, le type se fait jeter. Si le type tape (encore pour ricaner bêtement) 5.75, ça ne prendra que 5 et ça passe

n°30964
Texla
Posté le 11-05-2001 à 19:09:06  profilanswer
 

Aricoh a écrit a écrit :

 
si le type tape pour rigoler 'cc', la fonction atoi va retourner 0 dans nombre, le type se fait jeter. Si le type tape (encore pour ricaner bêtement) 5.75, ça ne prendra que 5 et ça passe




 
Nickellllll je vais le faire tourner et améliorer ca de facon a ce qu'on se fasse jeter meme si on tape 5.75...
 
 :jap: Aricoh  :jap:


---------------
-
n°31075
Aricoh
gentil mais fo po pousser
Posté le 12-05-2001 à 14:23:14  profilanswer
 

Texla a écrit a écrit :

 
Nickellllll je vais le faire tourner et améliorer ca de facon a ce qu'on se fasse jeter meme si on tape 5.75...




Avec ma fonction, si le type tape 5.75 pour faire le gros malin du village, la fonction va retourner 5, valeur qui sera prise en compte pour la suite de ton programme. C'est pas plus mal après tout ? Tel est pris qui croyait faire bugger ! :lol:
 
Sans la fonction, le mec tape 5.75 et le programme ne sortira plus de la boucle do_while

mood
Publicité
Posté le 12-05-2001 à 14:23:14  profilanswer
 

n°31301
Texla
Posté le 13-05-2001 à 21:02:02  profilanswer
 

:cry:  :cry: j'arrive pas quand on tape un nombre a virgule ....
 :sweat: kelkun peut m'aider?

 

[edit]--Message édité par Texla--[/edit]


---------------
-
n°31399
Texla
Posté le 14-05-2001 à 11:15:58  profilanswer
 

up!!  ;)


---------------
-
n°31716
kill9
Il a été tué vivant.
Posté le 15-05-2001 à 09:39:09  profilanswer
 

Ca devrais t'aider.
 
/* Utilisation des macros de test de caracteres pour realiser
   une fonction lisant un entier au clavier */
 
#include <stdio.h>
#include <ctype.h>
 
int get_int(void);
 
void main()
{
 int x;
    x =  get_int();
 
    printf("Vous avez tape : %d\n", x);
}
 
int get_int(void)
{
 int ch, i, sign = 1;
 
    /* Ignorer les espaces en tete. */
 
    while (isspace(ch = getchar()));
 
    /* Si le premier caractere n'est pas numerique,
       le recracher et renvoyer 0 */
 
    if (ch != '-' && ch != '+' && !isdigit(ch) && ch != EOF)
    {
  ungetc(ch, stdin);
        return 0;
    }
 
    /* Si le premier caractere est un signe moins, placer
       le signe du resultat. */
 
    if (ch == '-')
  sign = -1;
 
    /* Si le premier caractere est un signe + ou un signe -,
       lire le caractere suivant */
 
    if (ch == '+' || ch == '-')
        ch = getchar();
 
    /* Lire des caracteres jusqu'... en trouver un qui ne soit
       pas un chiffre. Effectuer la conversion en multipliant
       chacun des chiffres lus par la bonne puissance de 10 */
    for (i = 0; isdigit(ch); ch = getchar())
        i = 10 * i +  (ch - '0');
 
    /* Corriger eventuellement le signe. */
 
    i *= sign;
 
    /* Si on n'a pas rencontre d'EOF, c'est qu'on a lu un
       caractere non numerique. Le recracher. */
 
    if (ch != EOF)
        ungetc(ch, stdin);
 
    /* Renvoyer la valeur finale. */
 
    return i;
}
 
 
 
Voilaaaaaa !
a+

n°31956
Texla
Posté le 15-05-2001 à 18:25:18  profilanswer
 

:)  :jap:


---------------
-

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [C] empecher une erreur de frappe...

 

Sujets relatifs
[C++] petite erreur.... HELP[vb6] getfile et message d'erreur
[VB] deployement et erreur 429C++ --> erreur à la construction (pas à la compilation!)
[C/C++] Empecher que l'economiseur ne se lance[VB] Erreur
visual studio 6.0 (gravé+code) : erreur memoire ![SQL] Trigger pour empecher d'inserer une valeur
[mysql] erreur 2[Java] Erreur : sealing violation pour un parseur xml
Plus de sujets relatifs à : [C] empecher une erreur de frappe...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR