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?
esimerkiksi käynnistämiseen laitettaisiin "ohjelma.exe -ohjelmanosa1" tai pelkkä "ohjelma.exe" jos ei halua optioiden ominaisuuksia?
Vastaukset 8
Vanhimmat
int main (int argc, char*argv[])
{
switch (argc) {
case 1: /*ei parametreja*/ break;
default: /*käsittele parametrit argv[1]...*/break;
}
}
if(argc > 1)
{
//Käy läpi parametrit//
}
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
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ää.
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/
En tosiaan ehtinyt kokeilla kääntää koodia ja siinä tosiaankin oli pari typoa. Tässä korjattu versio:
int i=argc;
for(i=1; i