Kommandolinje argumenter ikke fungerer - Hopper over dem helt

stemmer
3

Alright, jeg prøver å få argumenter for å fungere med en liten testapplikasjon. Koden min er under. Jeg er ikke så erfaren på C ++, så jeg er ikke sikker på hvorfor når jeg starter testen med -trykk (eller --print) står det automatisk Ikke et gyldig alternativ og deretter ferdig opp.

#include <iostream>

int main(int argc, char* argv[])
{
    int option;
    option = 1;
    char* argument;
    argument = argv[option];
    while (option < argc)
    {
        if (argument == -print)
        {
            std::cout << Printing Extra Text;
        }
        else
        {
            std::cout << Not a valid option << std::endl;
        }
        option++;
    }
    std::cout << Printing normal text << std::endl;
    return 0;
}

Gjør jeg dette riktig? Takk på forhånd.

Publisert på 14/01/2009 klokken 09:11
kilden bruker
På andre språk...                            


6 svar

stemmer
12

Du sammenligner minnet adressen til strengen "-trykk" til minne adressen argument. Dette vil ikke fungere! Bruk strcmp()sammenligne strengverdier. I stedet for:

if (argument == "-print")

gjøre

if (strcmp(argument, "-print") == 0)
Svarte 14/01/2009 kl. 09:14
kilden bruker

stemmer
1
if (argument == "-print")

du kan ikke sammenligne strenger som dette!

Bruk strcmp () for å sammenligne strenger.

Svarte 14/01/2009 kl. 09:15
kilden bruker

stemmer
8

Den følgende linje er feil:

if (argument == "-print")

Her er du sammenligne pekere, ikke strengverdier. Erstatt med:

if (strcmp(argument, "-print") == 0)

C / C ++ oppfører seg annerledes enn Java eller C # om streng håndtering. Strenger er ikke en innfødt type eller objekt, men bare glorifiserte pekere til matriser av tegn.

Alternativt, og hvis alternativ liste blir mer komplisert, vurdere å bruke en dedikert alternativ parsing bibliotek som Boost 's Program_options . Det vil håndtere alle aspekter, inkludert validering og brukermeldinger.

Svarte 14/01/2009 kl. 09:17
kilden bruker

stemmer
2

Det har vært en stund at jeg programmert i C ++, men burde ikke en bare bruke

std::string argument;

og deretter sammenlignet med == ville fungere?

Svarte 14/01/2009 kl. 09:25
kilden bruker

stemmer
1

Ditt spørsmål sier du også ønsker å teste for --print (to streker), men koden sjekker ikke for det.

Også tildele deg argument utenfor loop, vil du ønsker å gjøre det inne i løkken ellers du bare skal teste argument # 1 hver gang rundt loopen.

Svarte 14/01/2009 kl. 09:33
kilden bruker

stemmer
1

Det er en annen problemer, når du leser argument. (Med alle nødvendige endringer)

int main(int argc, char* argv[])
{
    int option;
    option = 1;
    char* argument;
    while (option < argc)
    {
        argument = argv[option];
        if (strcmp(argument, "-print") == 0)
        {
            std::cout << "Printing Extra Text";
        }
        else
        {
            std::cout << "Not a valid option" << std::endl;
        }
        option++;
    }
    std::cout << "Printing normal text" << std::endl;
    return 0;
}
Svarte 14/01/2009 kl. 09:47
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more