16. maj 2013 - 16:03Der er
10 kommentarer og 1 løsning
Om anvendelse af argv i switch, og hvordan man overfører den til en funktion
Hej Eksperter
Jeg har et program hvor man skal tilføje 2 argumenter argv[1] argv[2].
Indtil nu har jeg brugt tal, og så giver det jo ingen problemer i et switch statement. Jeg skal bare skrive switch (atoi(argv[1]))
Nu er der virkelig mange muligheder for argv[1] og der vil sikkert komme flere i fremtiden, så jeg ville gerne for overskuelighedens skyld vælge på en tekst. F.eks. hvis argv[1] er lig med "open" at jeg så kan skrive case: "open".
Men jeg kan jo ikke skrive switch (argv[1]) da argv[1] er en pointer. Istedet må jeg lave en lang række af else if (!strcmp("transaction",argv[1])), og det ser ikke særlig overskueligt ud.
Endnu mere kompliceret bliver det hvis argv[1] = "admin" for så er der yderlig mange muligheder for værdien af argv[2].
Derfor ville jeg også gerne have en funktion i a la function case_admin(argv[2]) som varetager denne specielle situation. Men hvordan overfører man argv[2] i funktionen?
Kender nogen en måde til at gøre en streng til et unict tal?
Jeg har faktisk allerede en defineret typedef enum ADMIN_E { ADMIN_ENDOFDAY = 1, ... ... ... } FLX_ADMIN_FUNCTION;
Disse er trods alt ret sigende for hvilken funktion det er. Mit problem har bare været at jeg ikke kender tricket til hvordan jeg vælger FLX_ADMIN_FUNCTION admin_func = ADMIN_END_OF_DAY
hvis argv[2] = "ADMIN_END_OF_DAY"
El. mere generelt
Hvordan jeg får lavet argv[2] om til en konstant af typen FLX_ADMIN_FUNCTION
OK - Jeg slipper ikke for if else if else if else ... Der findes altså ikke noget trick hvormed man kan bruge en tekststreng som nøgleværdi i et array som kan i PHP.
I PHP ville jeg jo bare have lavet et array $func = array( "ADMIN_END_OF_DAY" => 1, ... )
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.