Как использовать массив для получения аргументов командной строки?

0

Поэтому я пытаюсь использовать cmd для принятия аргументов при запуске программы, но у меня все время возникают проблемы с преобразованием переменных из char в int, поэтому они могут использоваться с остальной частью программы. Спасибо за помощь заблаговременно.

int main(int argc, char* argv[]) {
    int n = 0, a = 0, b = 0, func = 0, choice = 0;
    double w;
    if(argc < 10)
    {
        cout << "The Program requires -f <Function> -a <Starting Point> -b <Ending Point> -m <Method> -n <Number of slices>" << endl;
        exit(0);
    }
    else
    {
        int func, a, b, choice, n;
        int i;
        for(int i = 1; i < argc - 1; i+=2)
        {
                if(argv[i] == "-f"){
                    func = *argv[i + 1];}
                else if(argv[i] == "-a"){
                    a = *argv[i + 1];}
                else if(argv[i] == "-b"){
                    b = *argv[i + 1];}
                else if(argv[i] == "-m"){
                    choice = *argv[i + 1];}
                else if(argv[i] == "-n"){
                    n = *argv[i + 1];}
                else {
                    cout << "Input is Invalid" << endl;
                    exit(0);}
                cout << argv[i] << endl;
        }
        w = (b-a)/double(n);
        next(n, a, b, w, func, choice);
    }
    return 0;
}

edit: Итак, я изменил свой код, чтобы выглядеть так, как показано выше, и он компилируется, но я получаю только оператор else. Например, когда запускается программа, используя следующую строку:./a3 -f 5 -a 1 -b 10 -m 3 -n 100. Я не уверен, почему программа возвращается к инструкции else: input is Invalid "вместо другого if if if else.

  • 0
    В чем проблема? Какой вывод у компилятора; какие ошибки вы получили?
  • 1
    Почему вы переопределяете свои переменные char* func, a, b, choice, n; ?
Показать ещё 1 комментарий
Теги:
arrays
cmd

2 ответа

0

Чувак, вы должны начать с:

int n = 0, a = 0, b = 0, func = 0, choice = 0;

и тогда у вас есть указатель на символ целочисленного типа, определенный как

  char* func, a, b, choice, n;

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

Решение:

Я думаю, вы могли бы использовать бросок на символ, прежде чем назначать ptrs..

0

у вас проблемы со сравнением строк.

if(argv[i] == "-f")

не проверяйте, соответствует ли argv [i] значение "-f", если он проверяет, совпадает ли значение указателя с указателем на строку констант "-f", с ошибкой. вы должны использовать методы сравнения строк, такие как strcmp.

также все флаги требуют значения, почему цикл:

for(int i = 1; i < argc; i++)
    {
    if(i + 1 != argc)

потому что это пары, вы можете написать это как:

for(int i = 1 ; i < argc - 1; i += 2) 

Ещё вопросы

Сообщество Overcoder
Наверх
Меню