Как получить первый аргумент вызова программы - PullRequest
1 голос
/ 23 ноября 2011

Я делаю программу на C, и это мой код:

int main(int argc, char **argv) {
    int n;
    char aux[10];
    sscanf(argv[1], "%[^-]", aux);
    n = atoi(aux);
}

Итак, если я запускаю программу из командной строки: my_program -23, я хочу получить число «23», чтобы изолировать его в переменной как целое число, но это не работает, и я не знаю почему ...

Ответы [ 2 ]

4 голосов
/ 23 ноября 2011

Ваш sscanf вызов пытается прочитать что-либо до (но не включая) первого - в строке.Поскольку - является (предположительно) первым символом, он aux заканчивается пустым.

Вы можете сделать что-то вроде: sscanf(argv[1], "%*[-]%d", &n);.Это пропустит любые начальные символы -, поэтому аргументы 23, -23 и --23 будут обрабатываться одинаково.Если вы хотите, чтобы --23 интерпретировался как -23 (только один из первых символов тире сигнализирует о флаге), вы можете использовать sscanf(argv[1], "-%d", &n); (и в этом случае, если в командной строке просто 23, преобразование будетпровалиться сразу).

2 голосов
/ 23 ноября 2011

проверьте формат sscanf, и я предполагаю, что aux является целым числом?

из http://www.cplusplus.com/reference/clibrary/cstdio/sscanf/ sscanf (str, "% d", & n);

...