en C .... je dois securiser pour que l'utilisateur ....

en C .... je dois securiser pour que l'utilisateur .... - C++ - Programmation

Marsh Posté le 17-04-2002 à 13:15:13    

sache pas rentrer des lettre pour la clé primaire de mon fichier
 
g donc:
 
printf ("entrez un clé: " );
scanf ("%d",&cle);
do
{
if (cle<0 || cle >9999)
  printf ("reentrez la clé: " );
  scanf ("%d";&cle);  
}
while (cle<0 || cle >9999);
 
mais si je rentre une lettre ça part en boucle infinie et ma clé est declarée en int bien sur...
comment faire pur empecher de rentrer des lettres ou de securiser ça?


---------------
:sol:
Reply

Marsh Posté le 17-04-2002 à 13:15:13   

Reply

Marsh Posté le 17-04-2002 à 14:08:08    

do
  printf("Entrez une clé : " );
while(scanf("%d",&cle)!=1 || cle<0 || cle>9999);


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
Reply

Marsh Posté le 17-04-2002 à 16:16:09    

[:screamfr]


---------------
:sol:
Reply

Marsh Posté le 17-04-2002 à 16:21:21    

fais une fonction BOOL isNumerique(CString cle)
la syntaxe est completement fausse, mais c juste pour l algo ...
 
BOOL isNumerique(CString sCle)
{ int iAux;
  CString sAux;
  iAux = atoi(cle);
  sAux.Format("%d", iAux);
  if (sAux != sCle)
     return FALSE;
  return TRUE;
}
 
...
 
printf ("entrez un clé: " );
scanf ("%s",&cle);
 
while (!isNumerique(cle) || (cle<0 || cle >9999))
{
 printf ("reentrez la clé: " );
 scanf ("%s";&cle);  
}


---------------
Canon Powershot S40
Reply

Marsh Posté le 17-04-2002 à 16:50:58    

bool n'existe pas en C
J'ai testé, ca marche très bien comme ça :
 
--------------------------------------------------
   int clef;
   ...
 
   printf ("Entrez une clef : " );  
   scanf ("%d",&clef);  
   while (clef < 0 || clef > 9999) {
      printf ("réentrez la clef : " );  
      scanf ("%d",&clef);
   }
 
--------------------------------------------------


---------------
iteme.free.fr | Mon feedback
Reply

Marsh Posté le 17-04-2002 à 16:55:49    

ITM a écrit a écrit :

bool n'existe pas en C
J'ai testé, ca marche très bien comme ça :
 
--------------------------------------------------
   int clef;
   ...
 
   printf ("Entrez une clef : " );  
   scanf ("%d",&clef);  
   while (clef < 0 || clef > 9999) {
      printf ("réentrez la clef : " );  
      scanf ("%d",&clef);
   }
 
--------------------------------------------------  




 
t'as essayé de rentrer un caractere?


---------------
:sol:
Reply

Marsh Posté le 17-04-2002 à 16:56:48    

Ah, oui, j'vais mal lu!
En effet, le problème est toujours là...


---------------
iteme.free.fr | Mon feedback
Reply

Marsh Posté le 17-04-2002 à 16:57:13    

ITM a écrit a écrit :

bool n'existe pas en C




 
 
CString non plus  ;) c etait juste pour l algo ...
si tu envois 01 il va te dire que c pas numerique ... faut etoffer, c etait juste une piste.
 
PS : c est koi boolean ?


---------------
Canon Powershot S40
Reply

Marsh Posté le 17-04-2002 à 17:14:13    

Tadam! Ca marche maintenant:
 
--------------------------------------------
#include <stdio.h>
#include <stdlib.h>
 
...
   int clef;
   char buf[255];
 
...
 
   while (1) {
      printf ("Entrez la clef : " );  
      scanf ("%s", buf);
      printf("chaine : %s\n", buf);
      if (isdigit(buf[0])!= 0) {
         clef = atoi(buf);
         if (clef >= 0 || clef <= 9999)
            break;
      }
      else
         continue;
   }
   printf("Clef = %d", clef);
--------------------------------------------
J'ai mis des etapes avec printf pour que tu vois bien, t'as plus qu'à les enlever apres.

 

[jfdsdjhfuetppo]--Message édité par ITM--[/jfdsdjhfuetppo]


---------------
iteme.free.fr | Mon feedback
Reply

Marsh Posté le 17-04-2002 à 17:17:12    

moue .... mais faut tester toute la chaine (buf) ...


---------------
Canon Powershot S40
Reply

Marsh Posté le 17-04-2002 à 17:17:12   

Reply

Marsh Posté le 17-04-2002 à 17:26:24    

Bien sur que non!
Exemple:
On entre le clef:
4554fg78ss45
Il prend buf[0] et il voit que c'est un chiffre
atoi(buf) va donc convertir le resultat en :
4554 et c'est tout, il s'arrete à la premiere lettre.

 

[jfdsdjhfuetppo]--Message édité par ITM--[/jfdsdjhfuetppo]


---------------
iteme.free.fr | Mon feedback
Reply

Marsh Posté le 17-04-2002 à 19:25:19    

ITM a écrit a écrit :

Tadam! Ca marche maintenant:
 
--------------------------------------------
#include <stdio.h>
#include <stdlib.h>
 
...
   int clef;
   char buf[255];
 
...
 
   while (1) {
      printf ("Entrez la clef : " );  
      scanf ("%s", buf);
      printf("chaine : %s\n", buf);
      if (isdigit(buf[0])!= 0) {
         clef = atoi(buf);
         if (clef >= 0 || clef <= 9999)
            break;
      }
      else
         continue;
   }
   printf("Clef = %d", clef);
--------------------------------------------
J'ai mis des etapes avec printf pour que tu vois bien, t'as plus qu'à les enlever apres.  
 
 




 
 
c koa c trucs? g jamais vu ça


---------------
:sol:
Reply

Marsh Posté le 17-04-2002 à 19:44:31    

isDigit est une macro, et atoi une fonction de la lib standard C ...bonnes révisions !  :D

Reply

Marsh Posté le 17-04-2002 à 19:50:21    

:lol:  :lol:


---------------
iteme.free.fr | Mon feedback
Reply

Marsh Posté le 17-04-2002 à 19:59:50    

HappyHarry a écrit a écrit :

isDigit est une macro, et atoi une fonction de la lib standard C ...bonnes révisions !  :D  




 
chui en 1ere moa tt on en est ayu liste et le prog le plus elaboré que g fé c un fichier tri ashcode :/  et ça on en a pas encore eu besoin


---------------
:sol:
Reply

Marsh Posté le 17-04-2002 à 20:01:51    

ouais mais connaitre au moins stdlib par coeur ca fait pas de mal quand on fait du C !

Reply

Marsh Posté le 17-04-2002 à 23:08:16    

ITM a écrit a écrit :

Bien sur que non!
Exemple:
On entre le clef:
4554fg78ss45
Il prend buf[0] et il voit que c'est un chiffre
atoi(buf) va donc convertir le resultat en :
4554 et c'est tout, il s'arrete à la premiere lettre.  




 
oue c sure ... c de la precision de d'horlogerie ...  :sarcastic:

Reply

Marsh Posté le 18-04-2002 à 12:05:53    

[:screamfr]


---------------
:sol:
Reply

Marsh Posté le 18-04-2002 à 12:20:13    

je veux pas dire une bêtise mais le C peut caster une variable pour forcer son type
 
Après avoir fait ton scanf sur ce que le user a saisi, qu'est-ce que ça fait si tu force la valeur retournée à être castée en int ?
 
Sauf erreur de syntaxe :
...
    scanf ("%d";&cle);  
    cle = int(cle);
}  
while (cle<0 || cle >9999);


---------------
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 18-04-2002 à 12:48:56    

expression syntax error :/


---------------
:sol:
Reply

Marsh Posté le 18-04-2002 à 12:55:16    

bistou a écrit a écrit :

expression syntax error :/  



Je me souviens avoir fait une fonction qui recevait la saisie en paramètre et qui la stockait dans un buffer (tableau)
 
pour chaque élément du tableau, j'utilisais la fonction atoi pour vérifier si c'était bien un int, arf j'me souviens plus comment j'avais fait le truc mais ça marchait hyper bien :(


---------------
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 18-04-2002 à 17:54:48    

[:screamfr]


---------------
:sol:
Reply

Marsh Posté le 18-04-2002 à 19:47:45    

tiens, j'ai retrouvé ma fonction en question, ça remonte au temps où je commençais à faire mes pas dans la programmation (suis passé à Perl depuis, arf !), je sais pas si ça te sera clair et utile mais bon, valà le brin :
 
/* vérification de saisie d'une valeur int à 1 ou 2 chiffres */
void verif_int (int *a, int nbre)
{
 char buffer[200];
 
 buffer[0] = '\0';
 
 gets(buffer);
 buffer[nbre] = '\0';
 *a = atoi(buffer);
 return;
}


---------------
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 18-04-2002 à 20:14:06    

bistou -> qu'est-ce que ne va pas? Le code que je t'ai donné marche très bien!!


---------------
iteme.free.fr | Mon feedback
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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