命令行参数没有被正确读取

标签 c if-statement argv argc

我遇到的问题是,每当我仅输入程序名称时,条件为 argc == 1 的 if 语句不起作用,并且命令提示符中不会打印任何内容,但当我测试它时,所有其他 if 语句都起作用.我真的不确定我做错了什么,谢谢你的帮助。

我也知道 towers 函数工作正常,因为对于我所做的任何其他测试运行,它都会打印正确的输出,只有当除了程序名称之外没有写入命令行参数时,它才不会打印任何内容。

int main(int argc, char **argv) {

int n;
int from;
int dest;

if ((atoi(argv[2]) > 3) || (atoi(argv[3]) > 3)) {
        fprintf(stderr, "Cant have more than 3 towers.");
        exit(1);
} else
if ((atoi(argv[1]) < 0)) {
    fprintf(stderr, "Cant have negative number of disks.");
    exit(1);
} else
if (argc == 1){
    fprintf(stderr, "No command line argument was given./n");
    n = 3;
    from = 1;
    dest = 2;
} else
if (argc == 2){
    fprintf(stderr, "One command line argument was given\n");
    n = atoi(argv[1]);
    from = 1;
    dest = 2;
} else
if (argc == 4) {
    fprintf(stderr, "Three command line arguments were given\n");
    n = atoi(argv[1]);
    from = atoi(argv[2]);
    dest = atoi(argv[3]);
}

towers(n, from, dest);

exit(0);
}

最佳答案

argc == 1意味着你没有 argv[1] , argv[2]等等

所以,程序不会到达argc == 1行,因为错误发生在该行之前。

您应该重新订购条件。

argc <= 1可能有助于检查参数是否未通过。

关于命令行参数没有被正确读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54385149/

相关文章:

java - 如何在不写入 "if statements"的情况下初始化输入字段?

python - 子进程运行 Bokeh 服务器时是否可以访问提供给它的参数?

c - 将 argv 传递到函数中不起作用

与 char 和常量的比较总是失败

c - 解析 Shell 的命令行参数

c - 从整数中提取特定位并将它们保存到 C 中的字符串中?

c - fscanf 的奇怪输入

java - 如何压缩 float 据?

c - 快速排序特例 - 似乎是 K&R 的错误算法

r - 为什么 if 和 else 语句不能在 R 中的不同行上