savoir si une variable est de type entier

savoir si une variable est de type entier - C++ - Programmation

Marsh Posté le 20-10-2002 à 17:31:29    

voici mon code:
do
    {
    clrscr;
    printf("Saisissez le nombre de tirages auxquels vous voulez proceder:\n(un nombre entier entre 1 et 99999)\n" );
    scanf("%d",&n);
    } while (n<=0 || n>99999

j'aimerai ajouter une condition du genre is_integer(n)
dans le cas où l'utilisateur saisie autrechose qu'un entier
merci
 
et je suis sous windows et clrscr ne fonctionne pas.
une idée ?
merci encore


Message édité par becvert le 20-10-2002 à 17:32:39
Reply

Marsh Posté le 20-10-2002 à 17:31:29   

Reply

Marsh Posté le 20-10-2002 à 17:32:28    

pourquoi faire? tu arrive a mettre dans n autre chsoe qu'un entier?
 
utilise les balise cpp, stp


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 20-10-2002 à 17:35:25    

Taz@PPC a écrit a écrit :

pourquoi faire? tu arrive a mettre dans n autre chsoe qu'un entier?
 
utilise les balise cpp, stp




 
si je saisie un caractere
ca pose un probleme
genre le symptome d'une boucle infinie
 
en fait ce que je veux c'est l"equivalent d'un is_integer en c
et non cpp
merci


Message édité par becvert le 20-10-2002 à 17:42:59
Reply

Marsh Posté le 20-10-2002 à 17:46:46    

si tu veux des entrées sorties sur en C, utilise fgets et scanf/atoi


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 21-10-2002 à 04:56:03    

Code :
  1. char buf[32];
  2. scanf("%31[0132456798]", buf);
  3. int i= atoi(buf);


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
Reply

Marsh Posté le 21-10-2002 à 06:57:09    

Musaran a écrit a écrit :

Code :
  1. char buf[32];
  2. scanf("%31[0132456798]", buf);
  3. int i= atoi(buf);






 
moi j'aurais plutot fait
 
fgets(buffer, 32 stdin)
int i=atoi(buffer);
 
et vérifier les codes de retour


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 23-10-2002 à 10:37:32    

utilise un do{} while(!scanf()) car il renvoie EOF si le type saisi est en desaccord avec le type demande voila sinon renvoi le nombre de caractere correctement saisi.
 
exemple :  
 
int i;
int res;
scanf("%d",&i);  si i = 1   alors res = 1
                 si i = 'c' alors res = EOF


Message édité par nicolasm le 23-10-2002 à 10:37:57
Reply

Marsh Posté le 23-10-2002 à 10:40:13    

nicolasm a écrit a écrit :

 
scanf("%d",&i);  si i = 1   alors res = 1
                 si i = 'c' alors res = EOF




 
res = scanf...
 
sinon ça fait pas grand chose :D


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 23-10-2002 à 10:41:23    

nicolasm a écrit a écrit :

utilise un do{} while(!scanf()) car il renvoie EOF si le type saisi est en desaccord avec le type demande voila sinon renvoi le nombre de caractere correctement saisi.
 
exemple :  
 
int i;
int res;
scanf("%d",&i);  si i = 1   alors res = 1
                 si i = 'c' alors res = EOF
 
de plus utilise un long car les int sont codees en soit sur 2 soit sur 4 octets(depend des compilos) soit 31 bits pour la valeur et 1 pour le signe soit 15 pour la valeur + 1 pour le signe.



Reply

Marsh Posté le 23-10-2002 à 13:03:34    

nicolasm a écrit a écrit :

utilise un do{} while(!scanf()) car il renvoie EOF




 
qui te dis que EOF n'est pas égal à -1 ou à 0? il faut tester explicitement en comparant avec EOF


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 23-10-2002 à 13:03:34   

Reply

Marsh Posté le 23-10-2002 à 14:36:52    

Taz@PPC a écrit a écrit :

 
 
qui te dis que EOF n'est pas égal à -1 ou à 0?  
il faut tester explicitement en comparant avec EOF




En fait ca depend des compilos pour EOF mais il a juste a tester si ca renvoie le bon nombre d arguments
 
c est a dire 1 pour son cas soit  
int x=0,toto;
while(x!=1)
x=scanf("%d",&toto); :-p

Reply

Marsh Posté le 15-12-2002 à 15:03:01    

Code :
  1. #define MIN 1
  2. #define MAX 99999
  3. int x,n;
  4. printf("Vous allez creer une nouvelle configuration\n" );
  5. printf("Saisissez le nombre de tirages auxquels vous voulez proceder compris entre [%d] et [%d] : ",MIN,MAX);
  6. x=scanf("%d",&n);
  7. while ((x!=1)||(n<MIN)||(n>MAX))
  8. {
  9.  if (x!=1)
  10.   printf("Taper un chiffre : " );
  11.  else
  12.   printf("Chiffre compris entre [%d] et [%d] : ",MIN,MAX);
  13.  if (n!='\n')
  14.   while (getchar()!='\n');
  15.  x=scanf("%d",&n);
  16.  if ((n>MAX)&&(n<MIN))
  17.  {
  18.   printf("Entrer un chiffre compris entre [%d] et [%d]\n",MIN,MAX);
  19.   printf("Retapper le nombre de tirages : " );
  20.  }
  21. }


 
voilà une solution avec vidange du buffer d'entrée
ça peut se faire également avec la commande fflush(sdtin) mais qui n'est pas autorisée par la norme ANSI


Message édité par gobbaf le 15-12-2002 à 15:05:04
Reply

Marsh Posté le 15-12-2002 à 15:54:54    

tiens c marrant j ai le meme exo a faire sur la dichotomie !
 
tp 8 exo 6

Reply

Sujets relatifs:

Leave a Replay

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