Конвертировать cin в arg c argv. Новое в использовании командной строки для передачи значений - PullRequest
0 голосов
/ 23 апреля 2020

Мне нужно преобразовать cin в arg c argv, и я не знаю, как go узнать об этом. это основная часть моего кода, где лежат все входные данные, если я мог бы получить некоторую помощь. Все это находится в c ++

Это то, что мне сказали: «Вам нужно использовать arg c и agrv [] в вашей основной функции. Таким образом, пользователи могут вводить информацию в вашу программу при запуске. Например, "yourprogram.exe -P 50". " Заранее спасибо.

int main(int argc, char* argv[])
{
    string userChoice = "";

    using std::string;
    int stop = 0;
    double pwm = 0;

    WritePWMfreq(46);

    cout << "PWM frequency set to: " << ReadPWMfreq() + 1 << "Hz" << endl;

    cout << "Enter 'P' to set the Duty Cycle for the PWM, 'A' to see the Analogue Port number \nor 'L' to set a target value for ADC0 port to match: " << endl;

    cin >> userChoice;

    int userPWM = 0;

    if (userChoice == "P" | userChoice == "p")
    {

        cout << "Please enter a duty cycle value between 1 and 100: " << endl;

        cin >> userPWM;

        if ((userPWM < 1) | (userPWM > 100))
        {
            cout << "That is outside of the possible range. Please try again. " << endl;

            return 0;

        }
        else

            WritePWM(userPWM);
        ReadPWM();

        return 0;

    }

    if (userChoice == "A" | userChoice == "a")
    {
        int userPort = 0;

        cout << "Please choose a port between 0 to 7 to find its value: " << endl;

        cin >> userPort;

        if ((userPort < 0) | (userPort > 7))
        {
            cout << "There is no port of this number. Please try again. " << endl;

            return 0;

        }
        else

            WriteADCPort(userPort);

        return 0;
    }

    if ((userChoice == "L") | (userChoice == "l"))
    {
        int i = 50;
        int userTarget = 0;

        cout << "Please enter a target value: " << endl;

        cin >> userTarget;

        cout << "The target value is: " << userTarget << endl;

        WritePWM(i);

        ReadPWM();
        ReadADCPort();

        if ((i <= 100) | (i >= 0) | (stop = 1))
        {
            while (ReadADCPort() <= userTarget)
            {
                WritePWM(i--);
                ReadPWM();
                ReadADCPort();

                pwm = ReadPWM();

                if (pwm == 1 | pwm == 0)
                {
                    stop = 1;
                }


            }
            while (ReadADCPort() >= userTarget)
            {
                WritePWM(i++);
                ReadPWM();
                ReadADCPort();

                pwm = ReadPWM();

                if (pwm == 1 | pwm == 0)
                {
                    stop = 1;
                }

            }

        }


    }
    else

        cout << "Invalid option. Please enter either 'A', 'P' or 'L'. " << endl;

    return 0;

}

Программа должна запускаться автоматическим тестером и, следовательно, должна запускаться из командной строки. Не знаю, как начать или как использовать argv arg c inputs

1 Ответ

0 голосов
/ 23 апреля 2020

argv - это просто массив, поэтому преобразуйте значения из соответствующих слотов в массиве. Первый параметр командной строки находится в argv[1], второй - в argv[2], stoi может использоваться для преобразования строк в целые числа.

userChoice = argv[1];

userPWM = stoi(argv[2]);

userPort = stoi(argv[2]);

userTarget = stoi(argv[2]);

В этом коде проверка ошибок нулевая. Вы должны хотя бы проверить, что пользователь ввел два значения

if (argc < 3)
    cout << "No option specified" << endl;
...