Avatar billede trold Nybegynder
03. marts 2000 - 12:38 Der er 4 kommentarer og
1 løsning

If not a number

Nybegynder spm til at fejlsikre at det indtastede er et tal og ikke bogstav

cout << " Alder: "; cin >> alder;

if (alder != Ja hvad mangler ??

Hvis det indtastede
Ikke er et tal men et bogstav
 
{
cout << " Alder:"; cin >> alder;
  }
Avatar billede dmk Nybegynder
03. marts 2000 - 12:49 #1
Alder -variablen skal selvfølgelig være en streng. Så kan du gøre følgende:

int IntAlder;
if (scanf(Alder, "%d", IntAlder)==0)
{
ERROR! Ikke et tal!
}

scanf returnerer hvor mange felter den har konverteret, så hvis den returnerede 0 har den altså ikke været i stand til at konvertere strengen til et tal.

DMK
Avatar billede soepro Nybegynder
03. marts 2000 - 13:12 #2
Ingen af standard C++ indlæsningsfunktionerne tillader dig fuld kontrol over hvad der bliver indtastet. DMK's løsning er bestemt svaret på dit spørgsmål, men løsningen tager stadig ikke højde for at der indtastes flere tegn i Alder, end du kan komme af med i intAlder, ej-heller hvis man kombinerer tal og bogstaver.

Vi har før berørt dette her på eksperten, du kan f.eks. se følgende svar:
Avatar billede soepro Nybegynder
03. marts 2000 - 13:19 #3
Avatar billede dmk Nybegynder
03. marts 2000 - 13:41 #4
Det er klart, at denne måde at håndtere det på, også vil acceptere strenge som:

1ogtyve      ->1
9fdasdf      ->9
  3 lala223  ->3

Hvis man vil sikre, at det indtastede KUN er et valid tal, så kan man gøre følgende:

inline bool IsNumber(char c)
{
  return (c>='0' && c<='9');
}

...
for (int CharIdx=0; alder[CharIdx]!=0x00; CharIdx++)
{
if (!IsNumber(alder[CharIdx]))
{
  printf("error at token: %s\n", &alder[CharIdx]);
}
}


Hvis man laver dette check, kan man være helt sikker på, at det man får konverteret i scanf faktisk KUN er et tal.

DMK
Avatar billede jinxed Nybegynder
07. marts 2000 - 12:13 #5
makroen isdigit() kan også bruges til dette formål
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester