Avatar billede code_freak Nybegynder
26. september 2003 - 21:42 Der er 24 kommentarer og
2 løsninger

give kommandoer i comandolinien

hvordan laver man et program som gikker i ens linie efter kommandolinien.

f.eks:
./kommandofil -d kommando1 -f kommando2
Avatar billede Slettet bruger
26. september 2003 - 21:45 #1
Med argv:

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

using namespace std;

int main(int argc, char *argv[])
{
  cout << argv[1];
  system("PAUSE");   
  return 0;
}
Avatar billede squashguy Nybegynder
26. september 2003 - 21:46 #2
program.exe hello world

int main(int argc, char **argv){
  //argv[0] -> program.exe
  //argv[1] -> hello
  //argv[2] -> world
  return 0;
}
Avatar billede soreno Praktikant
26. september 2003 - 21:47 #3
argv[0] indeholder path til programmet.
argv[1] indeholder første parameter.

f.eks. udskrives alle parametre sådan:
for(int i=0;i<argc;i++)
{
  cout << "param" << i << "\t" << argv[i] << endl;
}
Avatar billede squashguy Nybegynder
26. september 2003 - 21:47 #4
argc angiver hvor mange parametre som er givet
Avatar billede code_freak Nybegynder
26. september 2003 - 21:52 #5
hvordan ser man så om det er angivningen (1, 2, 3, 4, 5...), eller angivelsestypen (-tal,-t)?
Avatar billede soreno Praktikant
26. september 2003 - 21:58 #6
Du skal parse paramterene for at checkke at de er gyldige.

F.eks. (mit eks.):
main -t12345 -v3 -f foo -b Ar -bAr
param[0]        main
param[1]        -t12345
param[2]        -v3
param[3]        -f
param[4]        foo
param[5]        -b
param[6]        Ar
param[7]        -bAr

Altså kan det være snedigt at anvende samme teknik som i 7'eren (for at undgå for meget arbejde..).
Avatar billede soreno Praktikant
26. september 2003 - 22:04 #7
Jeg ved jeg har set et library der specifikt er lavet til at hjælpe med at holde styr på parametre.
Jeg kan bare ikke finde det igen :-(
Avatar billede code_freak Nybegynder
26. september 2003 - 22:06 #8
findes der ikke en måde at læse current param, og se om den indeholder et - også nogen text, så kan den fortælle at der vil komme en kommando efterfølgende af at mellemrum?
Avatar billede arne_v Ekspert
26. september 2003 - 22:14 #9
Librart til at parse -name value med er normalt kendt som getopt !
Avatar billede code_freak Nybegynder
26. september 2003 - 22:15 #10
kan dette virke (er ikke så god til C/C++)



for(int i=0;i<argc;i++)
{
if(argv[i] == "-d"){
i++;
d = argv[i];
}
if(argv[i] == "-f"){
i++;
f = argv[i];
}
}
Avatar billede arne_v Ekspert
26. september 2003 - 22:19 #11
1)  Du kan ikke bruge argv[i] == "-d" men skal bruge strcmp(argv[i],"-d")==0.

2)  Det går galt hvis man ikke angiver parametrene korrekt.

Men ellsrs er det noget af den logik der skal til.
Avatar billede code_freak Nybegynder
26. september 2003 - 22:22 #12
vil 0 være sand eller falsk?
Avatar billede arne_v Ekspert
26. september 2003 - 22:22 #13
0 = match
Avatar billede arne_v Ekspert
26. september 2003 - 22:23 #14
Der er masser af getopt libraries.

Google puttede denne her øverst:
  http://sourceforge.net/projects/yagol/
Avatar billede code_freak Nybegynder
26. september 2003 - 22:27 #15
jeg er helt på grundplan angående det plan med libraries, hvad er det for noget... er  det *.h filerne.. vis ja, så har jeg ikke en døjt forstand på dem, og kan jeg måske købe en bog om dem et sted?
Avatar billede arne_v Ekspert
26. september 2003 - 22:42 #16
Et library er typisk en .h fil og en .a fil, hvor du includer -h filen og linker
mod .a filen.
Avatar billede code_freak Nybegynder
26. september 2003 - 22:45 #17
altså skriver f.eks

g++ test.cpp -o test -h minheadfil.a

også finder den selv minheadfil.h?
Avatar billede arne_v Ekspert
26. september 2003 - 22:48 #18
Nej.

#include "mylib.h"

i din .cpp fil og build med:

g++ test.cpp mylib.a -o test

["-h" var en tyrk-fejl jeg mente ".h"]
Avatar billede code_freak Nybegynder
26. september 2003 - 22:51 #19
okay... hvor kan jeg læse om hvad de forskællige head filer gør, og hvordan jeg laver mine ejne?
Avatar billede arne_v Ekspert
26. september 2003 - 23:08 #20
Jeg kender ikke en god online tutorial til generel .h filer.

Standard .h filerne kan du læse om her:

http://www.cppreference.com/
Avatar billede code_freak Nybegynder
27. september 2003 - 17:58 #21
jeg har lidt problemmer med at få mine verdier fra argv[] til int.. hvordan kan jeg gøre det.

f.eks

./test -h 9

så skal
argv[1] være char og
argv[2] int
Avatar billede arne_v Ekspert
27. september 2003 - 18:01 #22
int h = 0;
if(strcmp(argv[1],"-h")==0) {
  h = atoi(argv[2]);
}
Avatar billede code_freak Nybegynder
27. september 2003 - 18:04 #23
tak... skal du ikke have point for svarende?
Avatar billede arne_v Ekspert
27. september 2003 - 18:06 #24
Jo tak.

(men der er jo også andre som har bidraget)
Avatar billede code_freak Nybegynder
27. september 2003 - 18:09 #25
giver soreno 3 dage til at lave et svar så :)

så deler jeg dem lige op
Avatar billede soreno Praktikant
27. september 2003 - 18:11 #26
Så må jeg hellere skynde mig !

:-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester