Я пытаюсь написать программу, которую я смогу запустить с пользовательскими аргументами. Как в этом примере "program.exe -width 1920 -height 1080". Я написал простой код, который должен работать.

#include <iostream>

int main(int argc, char* argv[])
{
    for (int i = 1; i < argc; i++)
    {
        if (argv[i] == "-width")
        {
            std::cout << "Width: " << argv[++i] << "\n";
        }
        else if (argv[i] == "-height")
        {
            std::cout << "Height: " << argv[++i] << "\n";
        }
    }

    return 0;
}

И эта программа не работает. Это ничего не отображает. Я также пытался проверять этот код построчно с помощью отладчика, но когда argv[i] == "-width" он просто пропускает его.

Есть ли способ исправить это или есть только другие способы сделать это?

0
Miłosz Brzechczyn 19 Июл 2020 в 17:00

2 ответа

Лучший ответ

Вы сравниваете указатели, а не строки. Чтобы сравнить строки через ==, вы должны использовать std::string.

Также вам следует проверить, существуют ли элементы argv[++i].

#include <iostream>
#include <string>

int main(int argc, char* argv[])
{
    for (int i = 1; i < argc; i++)
    {
        if (argv[i] == std::string("-width") && i + 1 < argc)
        {
            std::cout << "Width: " << argv[++i] << "\n";
        }
        else if (argv[i] == std::string("-height") && i + 1 < argc)
        {
            std::cout << "Height: " << argv[++i] << "\n";
        }
    }

    return 0;
}
4
MikeCAT 19 Июл 2020 в 14:01

Вы также можете использовать суффикс s

cout << ("wilson" == "wilson"s) << endl;

Выход:

1
2
Steve Wilson 19 Июл 2020 в 14:07