Gå til innhold
🎄🎅❄️God Jul og Godt Nyttår fra alle oss i Diskusjon.no ×

Gjøre om argumenter (char*) til char...


Anbefalte innlegg

Er nettopp ferdig med 'Teach yourself C++ in 21 days', og skriver noen enkle programmer for tida. Driver for øyeblikket med en command-line kalkulator for Linux. Tanken er at man skal kjøre programmet, calculate, slik:

/home/myubi> calculate 3 + 5

3 + 5 = 8

 

Måten jeg tenker å løse det på er å sjekke hvilken regneart det er snakk om, og deretter regne ut argv[1] og argv[3] med den regnearten. Problemet er at når jeg bruker

 

if ('+' == argv[2])

...

 

Så får jeg følgende feil:

 

calculator.cpp: In function 'int main(int, char **)':

calculator.cpp:59: ANSI C++ forbids comparison between pointer and integer

 

Hva gjør jeg da?

 

-- Myubi

Lenke til kommentar
Videoannonse
Annonse

Brukte atoi() og fikk det til å virke. Men, nytt problem:

 

Code:

#include <iostream.h>
#include <stdlib.h>

int main(int argc, char **argv)
{
int operand = 0;
int x, y;
char theOperand;

if (argc != 4)
{
cout << "Usage: " << argv[0] << " [number] [operand] [number]n";
return 1;
}

theOperand = atoi(argv[2]);
// cout << theOperand; // For debugging, doesn't display anything

// Tallene skal være ASCII-verdiene til +, -, /, *.
// Det funker ikke å bruke if ('+' == theOperand) heller.
if (43 == theOperand)
operand = 1;
if (45 == theOperand)
operand = 2;
if (47 == theOperand)
operand = 3;
if (42 == theOperand)
operand = 4;

if (0 == operand)
{
cout << "Illegal operand! Try again..n";
return 0;
}

x = atoi(argv[1]);
y = atoi(argv[3]);

switch(operand)
{
case 1:
cout << x << " + " << y << " = " << x + y << endl;
break;
case 2:
cout << x << " - " << y << " = " << x - y << endl;
break;
case 3:
...
break;
case 4:
...
break;
default:
cout << "Error!";
break;
}
return 0;
}

 

Problemet er at if'ene aldri evalueres til TRUE.

Hva er galt??

 

-- M

Lenke til kommentar

Quote:


Den 2002-09-20 22:30, skrev Myubi:

Er nettopp ferdig med 'Teach yourself C++ in 21 days', og skriver noen enkle programmer for tida.


 

Bra gjort å lære så mye på 21 dager.

 

Quote:


if ('+' == argv[2])


calculator.cpp: In function 'int main(int, char **)':


 

Pekere kan være et litt vanskelig konsept.

 

En tekststreng er en tabell med tegn (char).

 

argv er en tabell av strenger. Altså en tabell av tabeller, dvs. en todimensjonal tabell.

 

argv[2] gir det andre argumentet. (=En streng) Du er interessert i det første, (og eneste), tegnet i denne strengen.

 

argv[2][0] gir deg en char.

 

en mulig løsning er altså:

if ('+' == argv[2][0])

 

LeD

Lenke til kommentar

Quote:


Den 2002-09-21 02:08, skrev LeD:

Quote:


Den 2002-09-20 22:30, skrev Myubi:

Er nettopp ferdig med 'Teach yourself C++ in 21 days', og skriver noen enkle programmer for tida.


 

Bra gjort å lære så mye på 21 dager.

 

Brukte et halvt år på å komme igjennom boka.. Og det er mest for å vite om en del aspekter ved C++, så jeg kan skrive egne programmer og VIRKELIG lære.

 

Men nå funket det, takker!

 

-- Myubi

Lenke til kommentar
  • 1 måned senere...

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å
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...