parametrit ohjelman

kuinka onnistuu tehä C-kieliseen ohjelmaan käynnistysparametrit ohjelman käynnistämiseen?

esimerkiksi käynnistämiseen laitettaisiin "ohjelma.exe -ohjelmanosa1" tai pelkkä "ohjelma.exe" jos ei halua optioiden ominaisuuksia?
8514
Äänestä

Muut lukivat myös

Vastaukset 8

Vanhimmat

int main (int argc, char*argv[])
{
switch (argc) {
case 1: /*ei parametreja*/ break;
default: /*käsittele parametrit argv[1]...*/break;
}
}

Äänestä

if(argc > 1)
{
//Käy läpi parametrit//
}

Äänestä
  • Parametrit pitäisi käydä if-rakenteessa läpi jotta saa toimimaan?

    Äänestä

  • kuinka kirjoitti:

    Parametrit pitäisi käydä if-rakenteessa läpi jotta saa toimimaan?

    Riippuu tosin mitä haluat parametreille tehdä, tässä tarkistetaan onko joku tietty parametri annettu.

    int i=argc;
    for(i=1; i

    Äänestä

  • Johnnie83 kirjoitti:

    Riippuu tosin mitä haluat parametreille tehdä, tässä tarkistetaan onko joku tietty parametri annettu.

    int i=argc;
    for(i=1; i

    Minä en ainakaan saanut toimimaan tuolla rakenteella. Valitti kääntäessä tuon ekan if lauseen argc-kohtaa. Jotain muutakin vibaa näytti tuolla rivillä?

    Äänestä

  • tuossa kirjoitti:

    Minä en ainakaan saanut toimimaan tuolla rakenteella. Valitti kääntäessä tuon ekan if lauseen argc-kohtaa. Jotain muutakin vibaa näytti tuolla rivillä?

    sain toimimaan kun vaihdoin ekassa ifissä argc -> argv sekä else ifeissä arg ->argv. päätin myös sulkeet lisäämällä ) ;)

    En oo varma tuliko oikeen mut ainakin mulla pelittää.

    Äänestä

  • tuossa kirjoitti:

    Minä en ainakaan saanut toimimaan tuolla rakenteella. Valitti kääntäessä tuon ekan if lauseen argc-kohtaa. Jotain muutakin vibaa näytti tuolla rivillä?

    Seuraava ohjelma toimii minulla:

    #include
    #include

    int main (int argc, char** argv) {
    int arg = 1;
    while (arg < argc) {
    if (strcmp (argv[arg], "makkara") == 0)
    printf ("Makkara on hyvää!\n");
    if (strcmp (argv[arg], "peruna") == 0)
    printf ("Peruna on OK!\n");
    if (strcmp (argv[arg], "maksa") == 0)
    printf ("Maksa on siinä ja siinä.\n");
    if (strcmp (argv[arg], "sinappi") == 0)
    printf ("Sinappi on tarpeellinen mauste!\n");
    if (strcmp (argv[arg], "näkkileipä") == 0)
    printf ("Näkkäriä pitää syödä, että jaksaa koodata!\n");
    ++arg;
    }
    return 0;
    }

    Ajo:

    %./args makkara näkkileipä makkara peruna
    Makkara on hyvää!
    Näkkäriä pitää syödä, että jaksaa koodata!
    Makkara on hyvää!
    Peruna on OK!

    Ohjelman nimi on siis args ja ./ on Unixin juttu, jolla voi ajaa ohjelman nykyisestä hakemistosta, jos se ei ole polussa. Komentoriviargumentit ovat siis makkara näkkileipä makkara peruna.

    Menettelyä voi parantaa niin, että se pitää luetteloa käsitellyistä tiedoista, joten saman toistaminen voidaan tulkita virheeksi (vaikkapa KOKO=3 ja KOKO=5 yhtä aikaa). Lisäksi voi tehdä niin, että jos yhden argumentit tunnistaa, otetaan tieto siitä ja listan loppuun saavuttua tarkistetaan, että argumentti ollut tuntematon. Nimittäin, jos mikään kohta ei käsittele sitä, se on virheellinen argumentti, ja siitäkin pitäisi valittaa.

    Tässä on perusteellisempi ratkaisu:

    http://argtable.sourceforge.net/

    Äänestä

  • tuossa kirjoitti:

    Minä en ainakaan saanut toimimaan tuolla rakenteella. Valitti kääntäessä tuon ekan if lauseen argc-kohtaa. Jotain muutakin vibaa näytti tuolla rivillä?

    En tosiaan ehtinyt kokeilla kääntää koodia ja siinä tosiaankin oli pari typoa. Tässä korjattu versio:

    int i=argc;
    for(i=1; i

    Äänestä

Ketjusta on poistettu 1 sääntöjenvastainen viesti.

Kommentoi aloitusta


aloitukseen kirjoitti:

kuinka onnistuu tehä C-kieliseen ohjelmaan käynnistysparametrit ohjelman käynnistämiseen?

esimerkiksi käynnistämiseen laitettaisiin "ohjelma.exe -ohjelmanosa1" tai pelkkä "ohjelma.exe" jos ei halua optioiden ominaisuuksia?

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu