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

 


Dernière réponse
Sujet : [C] empecher une erreur de frappe...
Texla :)  :jap:

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
Texla :)  :jap:
kill9 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+
Texla up!!  ;)
Texla :cry:  :cry: j'arrive pas quand on tape un nombre a virgule ....
 :sweat: kelkun peut m'aider?

 

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

Aricoh

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

Texla

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:

Aricoh 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
Texla

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

kill9 Gloups (le Retour).
 
même pas fais gaffe a ca...puff....ok je pars m'acheter le C pour les Nulls
Aricoh 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 !
kill9 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;
Texla Merci  :jap: kill9  :jap:  
 
Pr le scanf je sais ce foutu & je l'oublie tjrs !!  
 
Je vais essayer  :)   :benetton:  :jap:
kill9 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);
}
Texla 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]


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)