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

Tester le type d'une variable entrée dans scanf - C++ - Programmation

Marsh Posté le 14-12-2002 à 03:56:51    

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

Reply

Marsh Posté le 14-12-2002 à 03:56:51   

Reply

Marsh Posté le 16-12-2002 à 18:38:19    

up !!
interressant ms c pas

Reply

Marsh Posté le 16-12-2002 à 20:14:37    

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

Reply

Marsh Posté le 17-12-2002 à 00:08:50    

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
Reply

Marsh Posté le 17-12-2002 à 02:37:49    

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

Reply

Marsh Posté le 17-12-2002 à 18:09:16    

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

Reply

Marsh Posté le 17-12-2002 à 20:52:38    

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

Reply

Sujets relatifs:

Leave a Replay

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