depassement de INT_MAX lors d'un controle de saisie - C - Programmation
Marsh Posté le 06-12-2003 à 13:30:15
au lieu de faire du mauvais C, tu veux pas plutôt expliquer ce que tu veux faire ?
Marsh Posté le 06-12-2003 à 13:32:29
Taz a écrit : au lieu de faire du mauvais C, tu veux pas plutôt expliquer ce que tu veux faire ? |
saisir un entier, et pas de zero non significatifs, pas de -----8, pas de ++++8, le truc con, mais j'ai du mal a tester si le nombre est < que INT_MAX.
tu a des exemples ou je fait du "mauvais c" comme ca j'apprendrait un truc
Marsh Posté le 06-12-2003 à 13:32:41
tiens d'ailleurs, un petit truc sympa à propos d'overflow, des petits templates fait par quelqu'un de fclc++
http://www.enseeiht.fr/~boyer/Tools.html
Marsh Posté le 06-12-2003 à 13:33:09
Didier1809 a écrit : |
et pourquoi cin >> bidule ça te plaît pas ?
Marsh Posté le 06-12-2003 à 13:34:27
Taz a écrit : tiens d'ailleurs, un petit truc sympa à propos d'overflow, des petits templates fait par quelqu'un de fclc++ |
mais bon, y faudrait un truc fait par moi si possible
Marsh Posté le 06-12-2003 à 13:35:08
Taz a écrit : et pourquoi cin >> bidule ça te plaît pas ? |
j'avais des merdes avec cout//cin
j'ai toujours pas capté pourquoi, mais il me faisait certaines instructions avant de faire le cout
ex :
Code :
|
ca ne marche plus
Marsh Posté le 06-12-2003 à 13:36:56
mais biensur ....
c'est quoi le problème avec
Code :
|
Marsh Posté le 06-12-2003 à 13:38:15
la saisie est char par char, avec ton truc, je pourais ecrire "dfgfg787" non ?
ps : excuse, mais je suis pas trop doué
Marsh Posté le 06-12-2003 à 13:39:59
euh la saisie char par char ça n'a un sens que si tu lis ne veux lire qu'un char apres l'autre. si tu veux en lire plusieurs, en char par char c'est impossible
Marsh Posté le 06-12-2003 à 13:41:31
je ne veut l'echo que des nombres, et du 1e "-" en fait
j'ai le while(carriage return) qui me permet de lire jusqu'a la frappe d'"enter"
Marsh Posté le 06-12-2003 à 13:43:44
bah débrouilles toi. change le titre de ton sujet, ce que tu fais dépend trop de ton sytème. et puis j'ai toujours rien compris à ce que tu veux faire.
lis ligne par ligne et filtre par regex, c'est que je ferais
Marsh Posté le 06-12-2003 à 13:46:32
je vais réessaier d'expliquer le probleme alors
j'aimeria que l'utilisateur entre un nombre, mais ne puisse pas ecrire : 000008; ----8; ++++8; +-+-+-8.
et bien sur, que les lettres ne soient pas prise en compte.
donc je doit lire char par char, pour pouvoir teter et faire l'echo ou non "put(ch)"
le seul probleme que j'ai, c'est quand "i" depasse la valeur max d'un int
Marsh Posté le 06-12-2003 à 13:51:21
et en quoi
Code :
|
n'est pas bon ? si ce n'est que le mec a encore la possibilité de voir ce qu'il tappe. si tu supprimes l'echo à la frappe, ton utilisateur n'arrivera jamais a entrer quelque chose de valide.
comme déjà posté ici plusieurs fois
Code :
|
tu as tout dans les istream pour lire correctement une entrée
Marsh Posté le 06-12-2003 à 13:53:39
justement je ne supprime l'echo que dans les cas qu'il ne m'interesse pas
essaie ma fonction, tu comprendra mieux
Marsh Posté le 06-12-2003 à 13:55:36
ta fonction ne fonctionne pas blaireau , ne compile pas, etc
un echo ça supprime pas. en fait ce que tu veux, c'est que ton mec, il tappe en aveugle, et seulement si c'est bon, il a le droit de voir ce qu'il a tapé. ridicule.
Marsh Posté le 06-12-2003 à 13:56:57
heu, le blaireau c'est toi, ca tourne nickel chez moi
t'a quoi comme erreurs de compil ??
et t'a l'echo si tu tape des bons trucs, sinon ce n'est pas prit en compte !
tien, vla l'appel de la fonction :
cout<<"l'entier vaut: "<<fEntier()<<endl;
Marsh Posté le 06-12-2003 à 13:58:39
Taz a écrit : ça s'appelle pas un echo ça. essaie plutot mon code |
j'ai essaié, ca marche bien , mais c'est pas ce que je veut
Marsh Posté le 06-12-2003 à 14:00:53
putain mais à partir du moment ou le mec il tape au clavier, il faut quand meme qu'il voit ce qu'il tappe. après tu valide l'entrée et passe au traitement sinon tu lui dit de recommencer
Marsh Posté le 06-12-2003 à 14:01:34
et si je ne veut pas
comme ca il ne doit pas recommencer la saisie
au fait, il n'y a pas d'autres conneries ecrites que les printf ?
Marsh Posté le 06-12-2003 à 14:04:07
et ben tu regardes avec ton système comment empecher complètement l'écho du clavier, c'e'st à dire tu gardes un truc comme je t'ai donné, sauf que tu vires l'echo et moi je me casse de ce sujet à la noix.
Marsh Posté le 06-12-2003 à 14:04:46
Taz a écrit : et ben tu regardes avec ton système comment empecher complètement l'écho du clavier, c'e'st à dire tu gardes un truc comme je t'ai donné, sauf que tu vires l'echo et moi je me casse de ce sujet à la noix. |
tu comprend pas trop la, essaie deja de voir ce que ma focntion fait, ca t'aidera a comprendre le seul prob qu'il y a
Marsh Posté le 06-12-2003 à 14:14:27
didier moi non plus je ne comprends pas ce que tu veux faire.
Tu voudrais faire un truc comme pour les mots de passe ?
(c'est à dire que tu entre ton password sans le voir et si il correspond bien tu continue les opérations)
c'est ca ?
et pour toi le 'truc' entré au clavier ca serais un nombre compris entre 0 et NB_MAX.
c'est ca ?
Marsh Posté le 06-12-2003 à 14:16:54
fFluFf a écrit : didier moi non plus je ne comprends pas ce que tu veux faire. |
pas excatement
en clair :
l'utilisateur se retrouve avec ca :
"entrez le nombre"
la il peut taper n'importe quoi ca n'ecrit rien, SAUF si c'est un nombre, la ca ecrit, pareil pour les 0 non diognificatif, et le "-".
il frappe "enter" et la fonction returne la valeur de l'entier inscrit.
sinon je met l'executable ici ?
Marsh Posté le 06-12-2003 à 14:17:00
ou alors tu veux que le 'truc' rentré au clavier ne soit pas d'une longeur supérieur a LONGUEUR_MAX :
123: longueur(123) = 3
Marsh Posté le 06-12-2003 à 14:19:18
ok je crois que j'ai compris :
"entrez le nombre :" si je tape 'a' rien ne s'affiche
si je tape '1' j'ai '1' qui s'affiche si je tape ensuite b y a toujours que '1' d'affiché et si je tape '2' la y a '12' d'affiché.
Marsh Posté le 06-12-2003 à 14:19:58
fFluFf a écrit : ok je crois que j'ai compris : |
voila
edit : tout marche, a part le test si le nombre depasse int_max
Marsh Posté le 06-12-2003 à 14:20:16
Didier1809 a écrit : |
Ben alors postes ca en C.
A+,
Marsh Posté le 06-12-2003 à 14:21:01
gilou a écrit : |
c'et que je fait pas trop la diff entre le c et le c++
Marsh Posté le 06-12-2003 à 14:22:52
Didier1809 a écrit : |
un coup de batte bien sentie
Marsh Posté le 06-12-2003 à 14:24:08
D'autre part, si tu veux pas voir ce que l'utilisateur saisit, il va falloir que tu geres ca au niveau console ou interface graphique, et ca devient donc totallement dependant de ton OS et ou toolkit graphique.
Bon, tu as la solution cheap de reecrire a chaque caractere tapé par l'utilisateur, c'est la gestion console minimale.
A+,
Marsh Posté le 06-12-2003 à 14:28:04
Didier1809 a écrit : |
Ben alors je le met directos en C, sinon tu risque la fatwa des emirs du C++, et c'est terrible
A+,
Marsh Posté le 06-12-2003 à 14:28:38
heyhehyehyehy j'ai compris je suis trop fort
sinon pour ton nombre qui depasse pas MAX bah tu pourrais faire par exemple :
a chaque fois que le mec rentre un nombre tu le mets en fin d'une chaine de caractère:
tape au clavier 1
str = '1'
tape au clavier 2
str = '12'
et quand le mec tape sur entré
tu converti str en entier (avec strtok ou un truc du genre)
et op c'est gagné
Marsh Posté le 06-12-2003 à 14:30:54
pour quoi tu désactives pas l'echo clavier une bonne fois pour toute, tu lis, et si c'est un nombre et pas trop gros tu affiches. toutes les solutions lire et "jusqu'ici ça va j'affiche" sont maladroites, fastidieuse, peu sures
Marsh Posté le 06-12-2003 à 14:32:55
Didier1809 a écrit : |
Tu comptes le nb de chiffres. Quand tu atteins celui de maxint, tu compares la valeur entree a maxint chiffre a chiffre (si c'est pas le vrai maxint, mais un truc nettement plus petit, tu peux faire la comparaison directe). Si ca depasse maxint, tu n'acceptes pas le dernier caractere tapé.
Faut gerer apres le trap de tout caractere sauf le \n qui va valider la saisie, et il faut gerer aussi la gestion en toute circonstance de la touche delete en cas de corrections.
A+,
Marsh Posté le 06-12-2003 à 14:34:14
heu, y a la fonction dans le 1e post tout marche, sauf si le nb est trop grand, c'est rélé avec i<99999 mais c'est pas top comme soluce
Marsh Posté le 06-12-2003 à 14:34:46
c'est pas bon comme solution. le fait de bloquer l'echo n'a rien à voir avec la non-bufferisation de l'entrée
Marsh Posté le 06-12-2003 à 14:35:03
Taz a écrit : pour quoi tu désactives pas l'echo clavier une bonne fois pour toute, tu lis, et si c'est un nombre et pas trop gros tu affiches. toutes les solutions lire et "jusqu'ici ça va j'affiche" sont maladroites, fastidieuse, peu sures |
parce que l'utilisateur doit quand meme voir les nombre qu'il entre
Marsh Posté le 06-12-2003 à 14:35:35
gilou a écrit : D'autre part, si tu veux pas voir ce que l'utilisateur saisit, il va falloir que tu geres ca au niveau console ou interface graphique, et ca devient donc totallement dependant de ton OS et ou toolkit graphique. |
j'ai choisit la version "cheap"
Marsh Posté le 06-12-2003 à 13:25:23
bonjour, c'est une bete fonction de saisie d'entier, tout marche, sauf le test de depassement de capacité, (ici, i<999999) completemt foireux.
je me demandait d'ou cela venait ??
ps : oubliez les melanges c/c++, et autres truc
Message édité par didier1809 le 06-12-2003 à 14:28:49
---------------
.