☀ ❄ Skrevet 20. september 2002 Del Skrevet 20. september 2002 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
☀ ❄ Skrevet 20. september 2002 Forfatter Del Skrevet 20. september 2002 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
LeD Skrevet 21. september 2002 Del Skrevet 21. september 2002 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
☀ ❄ Skrevet 21. september 2002 Forfatter Del Skrevet 21. september 2002 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
mariux Skrevet 18. november 2002 Del Skrevet 18. november 2002 if (!strcmp("+", argv[2])) { //den er + } else { //den er ikke + } sånn kanskje? Lenke til kommentar
LeD Skrevet 18. november 2002 Del Skrevet 18. november 2002 Quote: Den 2002-11-18 17:15, skrev mariux:if (!strcmp("+", argv[2])) strcmp er vel litt overkill når det bare er en char som skal sammenliknes? LeD Lenke til kommentar
Duronator Skrevet 18. november 2002 Del Skrevet 18. november 2002 String compare er slett ikke overkill,: bruk funksjonen strncmp() i stedet for strcmp: strncmp("+", argv[2]. 1); 1 tallet vil si at man sammenlikner 1 byte, altså det første tegnet, mye mer lettlest enn å bruke tall istedet for char's Lenke til kommentar
mariux Skrevet 21. november 2002 Del Skrevet 21. november 2002 Hva er forskjellen strncmp og strcmp? Case-sensitivity? Lenke til kommentar
A_N_K Skrevet 21. november 2002 Del Skrevet 21. november 2002 Quote: Den 2002-11-21 21:45, skrev mariux:Hva er forskjellen strncmp og strcmp?Case-sensitivity? Går an å slå opp vettu. Men sånn er det i alle fall: strncmp sammenligner n antall chars, istedenfor fram til terminerende ''. 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å