Gå til innhold

Lager et matteprogram, getchar gir meg askiverdien.


Anbefalte innlegg

Videoannonse
Annonse

atoi()

 

(om du bare trenger ett enkelt tegn/tall er det jo bare å x-48)

Så da skriv eg x=atoi(x)?

 

Nesten.

 

#include <stdlib.h>

// ...

const char *c = "42";
int number = atoi(c);

 

Å bruke x-48 er i teorien ikke plattformuavhengig.

 

Edit: Fikset idiotisk feil i kodesnutten.

Endret av Lstor
Lenke til kommentar

Nesten.

 

#include <stdlib.h>

// ...

char c = // ... whatever ...
int number = atoi(c);

 

Unnskyld, men hvordan skulle denne virke, mtp atoi() tar en const char pointer?

 

Å bruke x-48 er i teorien ikke plattformuavhengig.

 

Sifferverdien for hvert enkelt tegn kan hentes platformuavhengig som x - '0'.

 

Til OP: inputhåndtering i C er ganske pes. Standardrådet for å gjøre inputvalidering+konvertering i C består gjerne av følgende steg:

 

1. Lese inn brukerinput i et fast buffer (man kan utvide dette punktet til å takle en vilkårlig størrelse, men for tall er ikke det spesielt interessant for leketøyseksemplene). fgets() er en start.

2. Om #1 var vellykket, tolker man data fra bufferet. Hvis ikke, rapporterer man feil, kaster bufferet og evt. spør om input på nytt. Her er det nyttig med ferror() og slikt.

3. Tolkningen kan foregå på mange måter. Siden du har en relativt veldefinert oppgave, kan man bruke atoi(), strtol() eller sin egen parser for tall som måtte støtte det formatet du måtte ønske. strtol() er dog helt klart anbefalt. Du får gratis feilsjekking og støtte for alle grunntall mellom 2 og 35. Ganske kjekt.

Endret av zotbar1234
Lenke til kommentar

Konvertere ascii tall til integer tall så utfører du den logiske AND operasjonen med 0Fh som konstant:

 

AsciiTall AND 0Fh..

 

Dette beholder kun de 4 laveste bitene og sletter de øvrige og dermed har du tallet ditt. Det avhenger selvfølgelig at det er ett siffer i det.

Endret av LonelyMan
Lenke til kommentar
Gjest Slettet-Pqy3rC

atoi() er definert i stdlib.h (sammen med atol(), atof() etc), mens itoa() vel er MS stuff (som kan erstattes med printf()).

Endret av Slettet-Pqy3rC
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...