morgan_kane Skrevet 2. desember 2011 Del Skrevet 2. desember 2011 (endret) Hei, jeg lager et matteprogram i c, men getchar gir meg asciiverdien til tallet som blir tastet inn. Hvordan kan jeg gjøre det om til datatall før det puttes inn i en formel? Eks: x=getchar(); //tastet tall=3 printf("51",x) Endret 2. desember 2011 av morgan_kane Lenke til kommentar
Gjest Slettet-Pqy3rC Skrevet 2. desember 2011 Del Skrevet 2. desember 2011 (endret) atoi() (om du bare trenger ett enkelt tegn/tall er det jo bare å x-48) Endret 2. desember 2011 av Slettet-Pqy3rC Lenke til kommentar
morgan_kane Skrevet 2. desember 2011 Forfatter Del Skrevet 2. desember 2011 atoi() (om du bare trenger ett enkelt tegn/tall er det jo bare å x-48) Så da skriv eg x=atoi(x)? Lenke til kommentar
☀ ❄ Skrevet 2. desember 2011 Del Skrevet 2. desember 2011 (endret) 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 3. desember 2011 av Lstor Lenke til kommentar
LostOblivion Skrevet 3. desember 2011 Del Skrevet 3. desember 2011 Hvis du har tenkt til å bruke dette til matte, foreslår jeg python. Lenke til kommentar
morgan_kane Skrevet 3. desember 2011 Forfatter Del Skrevet 3. desember 2011 Hvis du har tenkt til å bruke dette til matte, foreslår jeg python. Ingen vits i å lære seg to programeringspråk når man bare bruker C på den linja jeg går Lenke til kommentar
GeirGrusom Skrevet 3. desember 2011 Del Skrevet 3. desember 2011 Ellers er også tallverdien til en char (dersom den er mellom 0 og 9) = tegn - '0'. Lenke til kommentar
zotbar1234 Skrevet 3. desember 2011 Del Skrevet 3. desember 2011 (endret) 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 3. desember 2011 av zotbar1234 Lenke til kommentar
☀ ❄ Skrevet 3. desember 2011 Del Skrevet 3. desember 2011 (endret) ... Unnskyld, men hvordan skulle denne virke, mtp atoi() tar en const char pointer? Du har selvfølgelig helt rett, gitt litt veldig fort i svingene der. Takk for rettelsen! Fikser kodesnutten i posten min nå. Endret 3. desember 2011 av Lstor Lenke til kommentar
LostOblivion Skrevet 4. desember 2011 Del Skrevet 4. desember 2011 (endret) Hvilken linje/skole går du på? Endret 4. desember 2011 av LostOblivion Lenke til kommentar
LonelyMan Skrevet 9. desember 2011 Del Skrevet 9. desember 2011 (endret) 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 9. desember 2011 av LonelyMan Lenke til kommentar
ze5400 Skrevet 14. desember 2011 Del Skrevet 14. desember 2011 atoi() og itoa() er da vitterlig Microsoft-spesifikke funksjoner. Om man bruker sprintf blir det riktignok litt mer knot, men til gjengjeld kryssplattform. Gjør man operasjonen mye er det jo bare å kaste det i en funsksjon uansett. Lenke til kommentar
Gjest Slettet-Pqy3rC Skrevet 14. desember 2011 Del Skrevet 14. desember 2011 (endret) atoi() er definert i stdlib.h (sammen med atol(), atof() etc), mens itoa() vel er MS stuff (som kan erstattes med printf()). Endret 14. desember 2011 av Slettet-Pqy3rC Lenke til kommentar
ze5400 Skrevet 14. desember 2011 Del Skrevet 14. desember 2011 Du her selvsagt helt rett Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå