2016-11-21 3 views
0

Meine Frage ist, wie man eine Funktion schreibt, mit der ich ein Programm von der Konsole mit folgenden Parametern ausführen kann: program.exe -i input.txt -o output.txt -t 1/2 3/Laufendes Programm von der Konsole mit Parametern

#include <stdio.h> 
#include <stdlib.h> 

char substitute(char letter, char* cipher) 
{ 
    int i; 
    int cipher_length = strlen(cipher); 
    char substitution = letter; 

    for(i = 0; i < cipher_length; ++i) 
     { 
      if(cipher[i] == substitution) 
      { 
      substitution = cipher[(i%2) ? (i-1) : (i+1)]; 
      break; 
      } 
     } 
    return substitution; 
} 

int main() 
{ 
    char c; 
    int t; 
    FILE *plik = fopen("input.txt", "rt"); 
    FILE *encoded=fopen("output.txt","wt"); 
    char* cipher1 = "GADERYPOLUKIgaderypoluki"; 
    char* cipher2 = "POLITYKARENUpolitykarenu"; 
    char* cipher3 = "KACEMINUTOWYkaceminutowy"; 

    printf("Choose the cipher\n"); 
    printf("[1]GA-DE-RY-PO-LU-KI\n"); 
    printf("[2]PO-LI-TY-KA-RE-NU\n"); 
    printf("[3]KA-CE-MI-NU-TO-WY\n"); 

    scanf("%d",&t); 
    while(c != EOF) 
    { 
     c = getc(plik); 
     switch(t) 
    { 
    case 1: 
      putc(putchar(substitute(c, cipher1)),encoded); 
      break; 
    case 2: putc(putchar(substitute(c, cipher2)),encoded); 
      break; 
    case 3: putc(putchar(substitute(c, cipher3)),encoded); 
      break; 
    } 
} 
    fclose(plik); 
    fclose(encoded); 
} 

ich war etw wie diese gegeben, aber ich weiß nicht, wie es zu benutzen:

int function(int argc, char*argcv[]) 
    { 
     int i; 
     char *string,*input,*output; 
     for(i=0; i<argc; i++) 
      { 

      } 
    return 0; 
    } 
+0

Beachten Sie, dass eine Option nach UNIX-Konvention zwei Formen haben kann, die Kurzform eines einzelnen Bindestrichs gefolgt von einem Zeichen, "-i", oder der langen Form eines doppelten Bindestrichs, gefolgt von einer sinnvollen Folge von Zeichen, "Eingabe". – Beta

+0

Ich schlage vor, ['getopt()'] (http://man7.org/linux/man-pages/man3/opterr.3.html) von '' zu betrachten. Das macht es ziemlich einfach. – e0k

Antwort

0

der Parameter int argc enthält die Anzahl der Parameter in der Befehlszeile.

Der Parameter char *argv[] ist ein Array mit allen in der Befehlszeile eingegebenen Strings.

Auf diese Weise können Sie die Befehlszeilenparameter wie abrufen:

int main(int argc, char *argv[]) { 
    int i = 0; 
    for (i = 0; i < argc; i++) { 
     printf("parameter %d = %s\n", i, argv[i]); 
    } 
} 

Sie die Parameter dann verarbeiten kann in der Kommandozeile übergeben:

int main(int argc, char *argv[]) { 
    int i = 0; 
    for (i = 0; i < argc; i++) { 
     ... 
     if (strcmp(argv[i], "-i") == 0) { 
      doSomething(argv[i+1]); 
     } 
     ... 

    } 
} 

die Zeichenfolge brechen Sie die verwenden können, folgender Code:

// ... 
    char buffer[256]; 
    char *p1 = NULL; 
    char *p2 = NULL; 
    int value = 0; 
    char old = 0; 

    strcpy(buffer, argv[7]); 
    p1 = buffer; 
    p2 = buffer; 

    do { 
      // parse until the delimiter 
      while (*p1 != '/' && *p1 != '\0') { 
        p1++; 
      } 

      // save delimiter value 
      old = *p1; 

      // convert the string to int 
      *p1 = '\0'; 
      value = atoi(p2); 
      p1++; 

      // do something with the value 
      printf(">> value %d\n", value); 

      // goto the next token 
      p2 = p1; 

    } while (old != '\0'); 
+0

Danke, ich werde versuchen, etwas damit zu tun :) –

+0

Ich habe ein Problem, in der Befehlszeile bei argv [7] Ich gebe eine Nummer 1/2/3 und meine Frage ist, wie diese Nummer 1/2/setzen 3 zu einer switch-Anweisung? Ich weiß, es ist keine ganze Zahl, kann ich das irgendwie? –

+0

Sie können den folgenden Code versuchen: –

Verwandte Themen