Аргументы командной строки не читаются должным образом - PullRequest
0 голосов
/ 27 января 2019

Проблема, с которой я сталкиваюсь, заключается в том, что всякий раз, когда я ввожу только имя программы, оператор if с условием argc == 1 не работает, и в моей командной строке ничего не печатается, но каждый другой оператор 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);
}

1 Ответ

0 голосов
/ 27 января 2019

argc == 1 означает, что у вас нет argv[1], argv[2] и т. Д.

Итак, программа не достигнет строки argc == 1, так как перед строкой возникает ошибка.

Вы должны изменить порядок условий.

И argc <= 1 может пригодиться для проверки того, что аргументы не переданы.

...