[C] cast probleempje

Pagina: 1
Acties:

  • eppie
  • Registratie: Maart 2000
  • Niet online
(overleden)
Hallo,

Ik zit met een cast probleempje dat niet echt wil lukken.

Op de commandline geef ik een getal mee aan het programma en dit getal wil ik weer gebruiken en daarom in een int variable stoppen.

code:
1
2
3
4
5
int main (int argc, char *argv[])
{
  char *name = argv[1];
  int speed = (int)*argv[2];
  printf("%d",speed);


Nou geef ik het getal 120 weer maar in die int staat nooit 120. maar 49 of weet wat anders, terwijl ik na mijn idee zo wel goed cast. Wat doe ik nou fout? Heb al verschillende manieren geprobeert maar vlgens mij moet dit goed zijn.

Hopelijk weten jullie het want kom er zo niet uit. :(

  • Nvidiot
  • Registratie: Mei 2003
  • Laatst online: 11-01 23:32

Nvidiot

notepad!

Begin eens met op te zoeken wat het verschil is tussen 'char' en 'int' en hoe je een char '6' moet converteren naar de int 6. Dat moet dus _niet_ met casten.

What a caterpillar calls the end, the rest of the world calls a butterfly. (Lao-Tze)


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

ord() of atoi()

[ Voor 50% gewijzigd door NMe op 27-03-2005 13:15 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Reptile209
  • Registratie: Juni 2001
  • Nu online

Reptile209

- gers -

Een verdere hint is dat de waarde 49 gelijk is aan de ascii waarde van '1' :).

Zo scherp als een voetbal!


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Reptile209 schreef op zondag 27 maart 2005 @ 13:22:
Een verdere hint is dat de waarde 49 gelijk is aan de ascii waarde van '1' :).
Je kan ook meteen dit doen:
C:
1
2
char c = '9';
int i = c - '1';

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
En je vervolgens afvragen waarom i==8. Les 0 in C: begin bij 0 te tellen.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • H!GHGuY
  • Registratie: December 2002
  • Niet online

H!GHGuY

Try and take over the world...

MSalters schreef op zondag 27 maart 2005 @ 17:21:
En je vervolgens afvragen waarom i==8. Les 0 in C: begin bij 0 te tellen.
offtopic: lol

ASSUME makes an ASS out of U and ME


  • Daos
  • Registratie: Oktober 2004
  • Niet online
eppie schreef op zondag 27 maart 2005 @ 13:06:
code:
1
2
3
4
5
int main (int argc, char *argv[])
{
  char *name = argv[1];
  int speed = (int)*argv[2];
  printf("%d",speed);
MSalters schreef op zondag 27 maart 2005 @ 17:21:
Les 0 in C: begin bij 0 te tellen.
argv[0] = naam, argv[1] = 1e argument, enz...

Bij het argument staat een string en niet een character zoals velen denken.
Deze is goed. Zit in stdlib.h.


Het wordt dus:
C:
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
#include <stdlib.h>

int main (int argc, char *argv[])
{
  char *name = argv[0];
  int speed = atoi(argv[1]);

  printf("%s\n",name);
  printf("%d\n",speed);
}

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 12:29

Creepy

Tactical Espionage Splatterer

Daos schreef op zondag 27 maart 2005 @ 18:14:
[...]
[...]


argv[0] = naam, argv[1] = 1e argument, enz...

Bij het argument staat een string en niet een character zoals velen denken.
[...]
MSalters heeft het over de C - '1' en niet over het gebruik van argv ;)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

MSalters schreef op zondag 27 maart 2005 @ 17:21:
En je vervolgens afvragen waarom i==8. Les 0 in C: begin bij 0 te tellen.
Dat heeft niks met C te maken, maar met de ASCII tabel. Ik wist niet meer zeker of in de ASCII tabel begonnen wordt met 0 of 1, maar blijkbaar dus met 0. Dan wordt het dus dit, neem ik aan:
C:
1
2
char c = '9';
int i = c - '0'; /* 57 - 48 == 9 */

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Daos
  • Registratie: Oktober 2004
  • Niet online
-NMe- schreef op zondag 27 maart 2005 @ 19:58:
[...]

Dat heeft niks met C te maken, maar met de ASCII tabel. Ik wist niet meer zeker of in de ASCII tabel begonnen wordt met 0 of 1, maar blijkbaar dus met 0. Dan wordt het dus dit, neem ik aan:
C:
1
2
char c = '9';
int i = c - '0'; /* 57 - 48 == 9 */
Dat klopt, maar je kijkt nu alleen naar 1 character. Als je een hele string wilt omzetten doe je dit in een loop.
C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
int str2int(char *str) {
    int res = 0;
    int neg = 0;

    if (*str == '-') {
        neg = 1;
        str++;
    }

    while (*str) {
        res *= 10;
        res += *str++ - '0';
    }

    if (neg)
        res = -res;

    return res;
}


In plaats van het zelf maken kan je ook atoi() gebruiken uit stdlib.h.
Pagina: 1