Avatar billede www.jesper Nybegynder
27. marts 2002 - 23:10 Der er 15 kommentarer og
1 løsning

Test om streng indeholder bogstaver

Jeg har et program i c++, hvor brugeren bliver bedt om at skrive et nummer, som gæmmes i en variabel af typen int.
Problemmet er at hvis brugeren skrivet et eller nogle bogstav(er), bryder programmet sammen.
Så mit spørgsmål er, hvordan kan jeg teste om variablen kun indeholdet tal???

MVH
Jesper
Avatar billede laffe Nybegynder
27. marts 2002 - 23:17 #1
Kan den bruges ?
bool IsNummeric(char* str)
{
  char* p;
  int len;

  if (!str)
    return false;
 
  p = str;
  len = strlen(str);
  for (int i=0; i<len; i++)
  { 
    if ( (*p<'0') || (*p>'9'))
      return false;
    p++;
  }
  return true;
}
Avatar billede laffe Nybegynder
27. marts 2002 - 23:21 #2
Jeg glemte lige at håndtere en tom streng.

bool IsNummeric(char* str)
{
  char* p;
  int len;

  if (!str)
    return false;
 
  p = str;
  len = strlen(str);
  if (len == 0) return false; // håndter tom streng
  for (int i=0; i<len; i++)
  { 
    if ( (*p<'0') || (*p>'9'))
      return false;
    p++;
  }
  return true;
}
Avatar billede www.jesper Nybegynder
27. marts 2002 - 23:22 #3
Det ser meget fornuftit ud, men jeg kan først teste det i morgen.
Avatar billede laffe Nybegynder
27. marts 2002 - 23:22 #4
OK.
Avatar billede greybeard Nybegynder
27. marts 2002 - 23:39 #5
Eller det samme

bool IsNummeric(char* str)
{
  do
  { 
    if ( (*str>='0') && (*str++<='9')){}
    else
      return false;
  }while (*str);
  return true;
}
Avatar billede laffe Nybegynder
27. marts 2002 - 23:45 #6
> greybeard . Hvad hvis str er NULL ;-)
Avatar billede greybeard Nybegynder
28. marts 2002 - 01:17 #7
Det er rigtigt, men kan den være det? Det kommer an på hvor den kommer fra.
Og i ægte C++ stil er det programmørens answar:-)
Avatar billede jpk Nybegynder
28. marts 2002 - 12:55 #8
=> greybeard:
Ægte C++ stil?

C++ definerer ikke hvor ansvaret ligger for at sikre fx valide inputparametre! Det hører heller ikke til under et programmeringssprogs semantik...
Avatar billede greybeard Nybegynder
28. marts 2002 - 13:20 #9
Det er jo det, der er sagen.
Der er meget der ikke er defineret i C++.
I C++ har du ikke nogen garanti for at en pointer er null, selv om den ikke er valid. Det er programmørens ansvar.
Det er fint at checke for null - værdi, men hvad hvis pointeren peger et andet tilfældigt sted.
Du bruger selv: char* p;
Hvilken værdi har p?
Hvis checket for null skulle være en garanti skulle alle erklæringer laves som : char* p = 0; , hvis der ikke tildeles en anden værdi.
Men bliver de det?
Desuden var der tre små tegn i enden af den linie
Avatar billede jpk Nybegynder
30. marts 2002 - 10:00 #10
=> greybeard:
Jamen så er alting jo godt; "det er programmørens ansvar".
Hvilken prøgrammør? Ham der har lavet funktionen eller ham der bruger den..? (ofte den samme)

Det jeg blot vil gøre klart er at der er ikke defineret nogle regler herfor, i C++'s semantik.
Hvordan man ønsker at programmere er helt op til den enkelte, men asvaret placeres efter det pattern eller de principper man vælger, ikke efter en "ægte C++ stil".
Avatar billede greybeard Nybegynder
31. marts 2002 - 11:55 #11
>> jpk
Ham der kalder funktionen, da det ikke er muligt for ham, der laver den at sikre sig 100%. Hvis det er den samme, som laver den, så fint. Så burde vedkommende vide, hvilke faldgruber der er.

Og når jeg siger 'ægte C++ stil', så mener jeg netop hvad du siger:"Det er ikke defineret."
Noget er der dog defineret. I hvert fald uofficielt. Der lægges stor vægt på performance, og performance lider hver gang, der skal laves ekstra check for fejl.
Det er både styrken og svagheden i C++. Masser af frihed, men også masser af muligheder for at kvaje sig.

Der ligger på den ene side en fare i at foregive at noget er idiotsikkert, når det ikke er det alligevel. Det giver en falsk tryghed, som før eller siden vil give problemer.
På den anden side kan man argumentere for at gøre det så godt man kan.

I øvrigt er stil ikke et spørgsmål om definition, men om individuel optræden. En optræden, der er præget af hvordan andre har gjort før en selv.
Avatar billede jpk Nybegynder
31. marts 2002 - 12:21 #12
=> greaybeard:
Og sådan kunne vi fortsætte i al evighed...

Der er IKKE én bestemt part, der ALTID har ansvaret som du beskriver!
Det vigtige er, at grænsefladen for den enkelte funktion er klart defineret, det er nemlig den eneste måde hvorpå man tilnærmelsesvist kan sikre sig! Hvis du snakker om sikker og robust softwareudvikling, tror jeg du skal gå lidt længere end blot at antage at alle har samme stil...

Og nej, det er ikke altid performance der er i højsædet! Det er, ligesom førdiskuterede emne, individuelt og afhængigt af andre ting.
Avatar billede laffe Nybegynder
21. april 2002 - 18:07 #13
> www.jesper. Kan du ikke lukke spørgsmålet ?
Avatar billede www.jesper Nybegynder
21. april 2002 - 21:36 #14
d
Avatar billede laffe Nybegynder
21. april 2002 - 22:59 #15
Var der ikke nogen svar du kunne bruge her ??????
Avatar billede www.jesper Nybegynder
22. april 2002 - 14:01 #16
nej
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