[C] empecher une erreur de frappe...

empecher une erreur de frappe... [C] - Programmation

Marsh Posté le 11-05-2001 à 15:08:13    

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]


---------------
-
Reply

Marsh Posté le 11-05-2001 à 15:08:13   

Reply

Marsh Posté le 11-05-2001 à 15:22:43    

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);
}

Reply

Marsh Posté le 11-05-2001 à 15:25:32    

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


---------------
-
Reply

Marsh Posté le 11-05-2001 à 15:36:53    

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;

Reply

Marsh Posté le 11-05-2001 à 15:45:41    

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
Reply

Marsh Posté le 11-05-2001 à 15:50:41    

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

Reply

Marsh Posté le 11-05-2001 à 17:23:25    

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 ...


---------------
-
Reply

Marsh Posté le 11-05-2001 à 18:39:54    

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

Reply

Marsh Posté le 11-05-2001 à 19:09:06    

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:


---------------
-
Reply

Marsh Posté le 12-05-2001 à 14:23:14    

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

Reply

Marsh Posté le 12-05-2001 à 14:23:14   

Reply

Marsh Posté le 13-05-2001 à 21:02:02    

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

 

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


---------------
-
Reply

Marsh Posté le 14-05-2001 à 11:15:58    

up!!  ;)


---------------
-
Reply

Marsh Posté le 15-05-2001 à 09:39:09    

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+

Reply

Marsh Posté le 15-05-2001 à 18:25:18    

:)  :jap:


---------------
-
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed