2016-11-24 12 views
-1

Итак, я пытаюсь использовать argc и argv в шифре Цезаря, чтобы выполнить программу только с помощью клавиши [./ key] (например, ./ 13 Caesar). Я пробовал много способов, хотя я должен признать, что я действительно потерялся здесь. Я думал, что должен просто использовать main (void) и задать вход с помощью fgets, но у меня все еще есть любопытство: как я могу заставить его работать с «int main (int argc, char * argv [])?». Любые подсказки, которые вы можете мне дать?Использование argc и argv в шифре Цезаря в C

Благодарим за помощь. Вот код с токовыми выходами:

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




int main(int argc, char *argv[]) 
{ 
    int key; 
    int result; 
    char str[60]; 
    int k = 0; 



    printf("argc =%d\n", argc); 
    printf("argv =%d\n", argv); 
    printf("key =%d\n", key); 



if (argc != 2) 
    { 
     printf("You didn't enter a key.\n"); 
     return 1; 
    } 

else 
    { 
     int k = key % 26; 
     printf("k =%d\n", k); 

     if (k == 0) 
     { 
      printf("Invalid key.\n"); 
      return 1; 
     } 
    } 
} 

Выход:

$ ./ceasar 13 
argc =2 
argv =-13216 
key =0 
k =0 
Invalid key. 

Edit: Ориентировочный Ответ

int main(int argc, char* argv[]) 
{ 
    int i; 
    int key = atoi(argv[1]); 
    int result; 
    char str[60]; 

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

if (argc != 2) 
    { 
     printf("You didn't enter a key.\n"); 
     return 1; 
    } 
else 
    { 

     if (key == 0) 
     { 
      printf("Invalid key.\n"); 
      return 1; 
     } 
    } 
} 
+1

Вы не инициализировали ключ varibale, попробуйте 'key = strtol (argv [1], NULL, 0)'. И почему вы сделали это 'printf (" argv =% d \ n ", argv);'? – freestyle

+0

и проверьте argc, чтобы обеспечить достаточное количество аргументов. Тогда 'argv [2]' ваше слово, и вам хорошо идти. –

ответ

1

Печать argv с "%d" спецификатором не определен behavi или, прочитайте руководство пользователя printf() и используйте "%p".

С другой стороны, если вы хотите напечатать строку, вы должны получить доступ к соответствующему элементу с помощью нотации массива. Например

printf("First Argument: %s\n", argv[1]); 

это относится ко всем аргументам, отметив, что argv[0] это имя исполняемого файла, как вызывается в командной строке.

Вы должны быть осторожны, прежде чем обращаться к argv[1], чтобы проверить это argc > 2 и всегда проверяйте текущий аргумент +!.

+0

Я смог решить немного! Мне просто пришлось объявить «int key = atoi (argv [1])» в начале. Благодарим за помощь! –