【问题标题】:Using argc and argv in Caesar cipher in C在 C 中的凯撒密码中使用 argc 和 argv
【发布时间】: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


【解决方案1】:

使用"%d" 说明符打印argv 是未定义的行为,请阅读printf() 的手册并使用"%p"

另一方面,如果您想打印字符串,您应该使用数组表示法访问适当的元素。例如

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

这适用于所有参数,注意argv[0] 是在命令行中调用的可执行文件的名称。

在访问argv[1] 之前还应该小心检查argc &gt; 2,并始终检查当前参数+!。

【讨论】:

  • 我解决了一点问题!我只需要声明“int key = atoi(argv[1]);”一开始。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多