en C .... je dois securiser pour que l'utilisateur .... - C++ - Programmation
Marsh Posté le 17-04-2002 à 14:08:08
do
printf("Entrez une clé : " );
while(scanf("%d",&cle)!=1 || cle<0 || cle>9999);
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);
}
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);
}
--------------------------------------------------
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?
Marsh Posté le 17-04-2002 à 16:56:48
Ah, oui, j'vais mal lu!
En effet, le problème est toujours là...
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 ?
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]
Marsh Posté le 17-04-2002 à 17:17:12
moue .... mais faut tester toute la chaine (buf) ...
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]
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
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 !
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 ! |
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
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 !
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 ...
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);
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
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;
}
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!!
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: