Blokering af bogstaver

Tags:    c++

<< < 12 > >>
Hejsa allesammen...
Jeg vil bare lige høre, om der findes en algoritme, der kun tillader tal, at blive indtastet?

Mvh. Michael N P



18 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 1 karma
Sorter efter stemmer Sorter efter dato
Prøv at kikke på det jeg linkede til, det burde kunne løse problemet.

Jeg forstår det bare ikke helt:-(
Hvad er det der template og hvor skal det placeres? mit program er lavet i funktions, har det noget at sige?
synes ikke rigtig jeg kan inplementere det:-(
Gider du forklare de enkelte elementer?



Med den helt simple version putter du bare følgende ind i starten af din .cpp fil, efter #include <string> og #include <sstream>

Fold kodeboks ind/udKode 


Og så erstatter du:
Fold kodeboks ind/udKode 


med:

Fold kodeboks ind/udKode 


Hvis du vil prøve igen indtil brugeren indtaster et gyldigt tal:

Fold kodeboks ind/udKode 




Hej Michael,

noget i denne retning skulle vel kunne gøre det

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

int main(int argc, char* argv[])
{
char cNumber[12],cTmp, i;

i = 0;
do
{
cTmp = getch();
if((cTmp >= 0x30) || (cTmp <= 0x39))
cNumber[i++] = cTmp;
}
while(cTmp!=0x0d);

printf("%d",atoi(&cNumber[0]));

getch();
return 0;
}
Hilsen Thomas


[Redigeret d. 18/11-05 07:33:57 af Thomas Vanting]



Der findes brugere der tror at numre kan være på mere end 11 (12) tegn.

Man kan ikke se hvad der skrives.

Man kan ikke slette

Der er ingen garanti for at '0' er 0x30

Det er ikke alle kompilere der har getch (eller noget der ligner)

Man bør 0-terminere inden man kalder atoi

Men ellers....



Der findes brugere der tror at numre kan være på mere end 11 (12) tegn.

Man kan ikke se hvad der skrives.

Man kan ikke slette

Der er ingen garanti for at '0' er 0x30

Det er ikke alle kompilere der har getch (eller noget der ligner)

Man bør 0-terminere inden man kalder atoi

Men ellers....


Det med 11 (12) tegn, ja man kan jo sige at hvis man caster til int, så bør man jo nok enlig sikre sig at det tal man har fra et array ikke overstiger max værdien for ens variabel type. Så enlig er 11 karakter jo for meget :-)

1. blev der spurgt om metoder til at blokere bogstaver, der med kommer jeg med et forslag til dette. IKKE en endelig løsning

2. nej man kan ikke slette, dog er dette ikke mere svært at tilføje end de fleste med bare lidt prog. erfaring bør kunne tilføje.

3. Hvorfor er 0 ikke lig 0x30...? Tegntabel 850, 0-9 = (0x30 - 0x39), jeg har aldrig oplevet andet. Men tør da ikke sige det!

4. nej man kan ikke se hvilket tal man skriver, erstat getch() med getche()

5. Det er muligt at ikke alle kompiler kender getch, men Borland, Dev-cpp og Visual Studio kender den, den tilhøre jo conio.h. Har aldrig hørt om compiler der ikke kan kompile den men skal da ikke sige det!

6. 0-terminere, ja det kan du have ret i. Det er naturligvis god skik.

Med venlig hilsen
Thomas Vanting

P.S i if sætningen skal OR || naturligvis erstattes med AND && (kunne jeg lige se)

[Redigeret d. 22/11-05 07:59:04 af Thomas Vanting]



Problemet med de 11/12 tegn er at der ikke er nogen check for om brugeren taster mere end 11/12 tegn, og det kan have fatale konsekvenser hvis han gør.

1 og 2: Ok

3: Der er ingen garanti for at'0' er 0x30, '0' er ét tegn mindre en 0x30, så hvorfor ikke bruge '0'?

4: Det er en mulighed.

5: C og C++ standarden har ikke getch og der er kompilere der ikke har den, eller mulighed for at lave noget tilsvarende.

6: Ikke nok med at det er en god idé, det kan have fatale konsekvenser hvis man ikke gør.




Det er rigtigt at der er ingen kontrol for hvor mange karaktere der indtastet, det bør da være, en kontrol som foruden også skal sikre at den typecast der laves passer med antal indtastede karaktere.

Det med 0 ikke er 0x30 osv.... tja...det er muligt. Har dog aldrig oplevet det. Men såfølgelig vil man kunne bruge '0'-'9' som kontrolparameter.

getch er ikke en standart C++ funktion, nej det er vist rigtigt. Men jeg har dog aldrig haft problemer med den, blot inkludere conio.h. Så plejer det at virke.

Og ja man skal altid huske og nul-terminere når man arbejer med tekst strenge.

Ellers for ikke at "tæske mere" i det, vil jeg sige til Michael, at jeg håber ikke alt dette har skabt total forviring, og prøv dig lidt frem der findes mange løsningsmodeller.

Hilsen
Thomas Vanting



Hejse... Jeg fandt på en meget smart måde... Men tak for alle svarene...

Fold kodeboks ind/udKode 





<< < 12 > >>
t