2016-11-21 3 views
0

Мой вопрос заключается в том, как написать fuction, с помощью которого я могу запустить программу с консоли со следующими параметрами: program.exe -i input.txt -o output.txt -t 1/2/3Запуск программы с консоли с параметрами

#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); 
} 

я был дан н, как это, но я не знаю, как использовать его:

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

      } 
    return 0; 
    } 
+0

Обратите внимание, что по соглашению UNIX опция может иметь две формы: краткую форму одного дефиса за которым следует символ, '-i', или длинная форма двойного дефиса, за которым следует значимая последовательность символов,' --input'. – Beta

+0

Предлагаю посмотреть ['getopt()'] (http://man7.org/linux/man-pages/man3/opterr.3.html) с ''. Это делает это довольно простым. – e0k

ответ

0

параметр int argc содержит число параметров в командной строке.

Параметр char *argv[] - это массив со всеми строками, указанными в командной строке.

Таким образом, вы можете получить параметры командной строки, как:

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

Вы можете обрабатывать то параметры, передаваемые в командной строке:

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]); 
     } 
     ... 

    } 
} 

Чтобы разбить строку, которую вы можете использовать следующий код:

// ... 
    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

Спасибо, я постараюсь сделать что-то с этим :) –

+0

У меня проблема, в командной строке в argv [7] Я дам номер 1/2/3, и мой вопрос в том, как поставить этот номер 1/2/3 к заявлению переключателя? Я знаю, что это не целое число, я могу как-то это сделать? –

+0

Вы можете попробовать следующий код: –

Смежные вопросы