【发布时间】:2016-11-25 07:36:15
【问题描述】:
因此,我尝试在 Caesars 密码中使用 argc 和 argv,以便仅使用 [./ key ;string] 执行程序(例如 ./ 13 Caesar)。我尝试了很多方法,尽管我必须承认我真的迷路了。我在想我应该只使用 main(void) 并使用 fgets 询问输入,但我仍然有一些好奇心:如何使它与“int main(int argc, char *argv[]) 一起工作?”。有什么线索可以给我吗?
感谢您的帮助。这是当前输出的代码:
#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.
编辑:暂定答案
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;
}
}
}
【问题讨论】:
-
你没有初始化键变量,试试
key = strtol(argv[1], NULL, 0)。你为什么要这么做printf("argv =%d\n", argv);? -
并检查 argc 以确保传递了足够的参数。然后
argv[2]是你的话,你很高兴。
标签: c argv caesar-cipher argc