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

  FORUM HardWare.fr
  Programmation
  C++

  Tester le type d'une variable entrée dans scanf

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Tester le type d'une variable entrée dans scanf

n°269534
vanik
Posté le 14-12-2002 à 03:56:51  profilanswer
 

Bonjour tout l'monde,
 
je debute donc et g un petit souci.
dans un bout de code je dois mettre un scanf("%d", &variable) (avec variable etant un int) mais si l'utilisateur entre un caractere ca fait tout rater... je voudrais pouvoir tester le type, ie verifier qu'il s'agit bien d'un int, pas d'un char ou d'une chaine de caractere...
y'a-t-il une fonction qui pourrait faire ca s'il vous plait?
 
je pensais à utiliser scanf("%s", variable) avec variable etant un char *... puis faire atoi(variable) mais je ne suis pas du tout sur de moi et j'aimerais faire qqc de bien. utiliser une autre fonction que scanf?
 
g vu ds le man que scanf renvoie 0 ds le cas précis où on entre un char alors que le programme attend un int. j'ai donc essayé de faire un test du genre :

Code :
  1. do
  2. printf("Entrez votre chiffre\n" );
  3. while(scanf("%d", &variable) == 0);


 
mais ca ne marche pas, ca boucle sans arret sans attendre que je saisisse une nouvelle fois au clavier... j'ai essayé d'autres feintes, mais sans succes.
 
help me pleeease :( ca doit etre tout simple en plus ca
 
merciii

mood
Publicité
Posté le 14-12-2002 à 03:56:51  profilanswer
 

n°270886
weed
Posté le 16-12-2002 à 18:38:19  profilanswer
 

up !!
interressant ms c pas

n°270955
qxn
Posté le 16-12-2002 à 20:14:37  profilanswer
 

en fait j'ai une soluce conne que j'avais utiliser pour savoir si c t unchar ou si c t un chiffre ( int ) il suffit de matter la table ascII
 

Code :
  1. int recherche(void)
  2. {
  3. char tmp_rep[MAX_NOM];
  4. int tmp_num;     
  5. int i=0;
  6. list_cli();
  7. printf("\nIndiquer le nom du client ou le numero de compte\n" );
  8. scanf("%s",&tmp_rep);
  9. if ( ((int)tmp_rep[0] >= 48) && ((int)tmp_rep[0] <= 57) )
  10. {
  11.  tmp_num=atoi(tmp_rep);
  12.  printf("\nle client est M.%s et numero de compte %d\n",tabcli[tmp_num].nom,tabcli[tmp_num].no_compte);
  13.  getchar();
  14.  return tmp_num;
  15. }
  16. else
  17. {
  18.  for(;i<=MAX_NOM;i++)
  19.  {
  20.   if(strcmp(tabcli[i].nom,tmp_rep)==0)
  21.   {
  22.    return i;
  23.   }
  24.  }
  25.     printf("\nle nom n'est pas present dans nos fichier clients\n" );
  26.     return -1;
  27. }
  28. }


 
la je te refile une fonction que j'ai utiliser pour faire une rechercher soit a partir d'un numero ou d'un nom sans avoir pour autant a aller dans un sous menu different.
 
donc le teste ki t'interresse c ca :  
 

Code :
  1. if ( ((int)tmp_rep[0] >= 48) && ((int)tmp_rep[0] <= 57) )


 
dans la table ascII les chiffre 0 a 9 sont stocker entre "48" et "57" le reste c des char ou caracteres speciaux/non affichable donc te suffit de faire ca et tu c si c un nombre et la tu fais apparaitre ho gamin fallais foutre un chiffre lol
 
bon si tu t'en sors pas fais signe je t'aiderai  
 
PS: c la premiere fois que je post ici alors si je suis pas tres clair desolé et si kkun a mieux ba faite signe ca m'interresse aussi lol

n°271083
farib
Posté le 17-12-2002 à 00:08:50  profilanswer
 

Vanik a écrit :

Bonjour tout l'monde,
 
je debute donc et g un petit souci.
dans un bout de code je dois mettre un scanf("%d", &variable) (avec variable etant un int) mais si l'utilisateur entre un caractere ca fait tout rater... je voudrais pouvoir tester le type, ie verifier qu'il s'agit bien d'un int, pas d'un char ou d'une chaine de caractere...
y'a-t-il une fonction qui pourrait faire ca s'il vous plait?
 
je  


 
il faut que tu comprennes que ce ne sera jamais le cas.
 
ce ne sera que l'interprétation que TU feras des entrées clavier.... si tu veux vérifier qu'il entre pas de caracteres, il faut que tu recoive une chaine de caracteres et que tu l'analyse.


---------------
Bitcoin, Magical Thinking, and Political Ideology
n°271103
vanik
Posté le 17-12-2002 à 02:37:49  profilanswer
 

Merci à vous pour vos reponses. merci pr les codes. j'avais pensé effectivement à la correspondance par la table ascii mais malheureusement le prof a mis un getback en disant que ca n'etait pas portable (pour les ibm ou je c plus trop quoi...).
Conclusion de l'histoire, il faut utiliser la fonction isdigit qui est conforme à la norme ansi. ;) (#include <ctype.h> )
 
Merci pr votre aide.
@ ++

n°271687
morph
Posté le 17-12-2002 à 18:09:16  profilanswer
 

la fonction scanf doit retourné 0 si valeur ne correspond pas au type souhaité
 
if(scanf == 0)
{
   /* erreur */
}

n°271802
weed
Posté le 17-12-2002 à 20:52:38  profilanswer
 

qxn pq tu caste  

Code :
  1. if ( ((int)tmp_rep[0] >= 48) && ((int)tmp_rep[0] <= 57) )

 
 
tu peux laisser en char je pense pr faire la comaparaison


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

  Tester le type d'une variable entrée dans scanf

 

Sujets relatifs
imageloadfont() quelle type de police utiliser ?? [résolu]formulaire > Mailto:$une variable, est ce possible ?
Passer un tableau en variableFPDF Passer ue variable a la fonctions header
notice avec $_GET[variable] [Résolu]Serveur local impossible de passer des variable par url [résolu]
Expression: BLOC_TYPE_IS_VALIDE????Erreur T_Variable
Ti89 : assigner un complexe à une variable...Type de menu, HELP PLEASE.
Plus de sujets relatifs à : Tester le type d'une variable entrée dans scanf


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