Итак, я пытаюсь использовать 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;
}
}
}
Вы не инициализировали ключ varibale, попробуйте 'key = strtol (argv [1], NULL, 0)'. И почему вы сделали это 'printf (" argv =% d \ n ", argv);'? – freestyle
и проверьте argc, чтобы обеспечить достаточное количество аргументов. Тогда 'argv [2]' ваше слово, и вам хорошо идти. –