命令行参数未正确阅读

时间:2019-01-27 04:45:09

标签: c if-statement argv argc

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

我还知道塔函数正常工作,因为对于任何其他测试运行,它都会输出正确的输出,只有在未写入除程序名称以外的任何命令行参数的情况下,它才输出任何内容。

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);
}

1 个答案:

答案 0 :(得分:0)

argc == 1表示您没有argv[1]argv[2]等。

因此,程序将无法到达argc == 1行,因为该行之前会发生错误。

您应该取消重新排序条件。

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