首页 > 解决方案 > 我需要从 argv 输入计算数字,但数字不是整数,它们是字符。我怎么投?

问题描述

我无法计算不是整数的数字。我需要一种将字符转换为字符串以使用 atoi() 函数的方法,或者至少一种计算这些数字的方法

我尝试从字符中减去 48/'0'。

argv = 添加 2 3 5 7 11 13

#define MINIMUM_ARGS 2

int main(int argc, char** argv)
{
    int i = 0;
    int calc = 0;
    char string[2] = { 0 };
    if ((strcmp(argv[1], "SUB") == 0 || strcmp(argv[1], "ADD") == 0) && ((argc - MINIMUM_ARGS) > 1))
    {
        string[0] = argv[2];  //Making calc be the value of the first number.
        calc = atoi(string);
        for (i = 3; i < argc; i++)
        {
            if (strcmp(argv[1], "SUB") == 0)
            {
                if (strlen(argv[i]) > MINIMUM_ARGS)
                {
                    calc -= atoi(argv[i]);
                }
                else
                {         
                    calc -= atoi(argv[i] - 48);
                }
            }
            else
            {
                if (strlen(argv[i]) < MINIMUM_ARGS)
                {
                    string[0] = argv[i];
                    calc += atoi(string);
                }
                else
                {
                    calc += atoi(argv[i]);
                }
            }

        }
        printf("Result: %d", calc);

    }

预期 = 41 得到 = 0

标签: c

解决方案


在我看来,你让事情变得比需要的更复杂。我不明白为什么MINIMUM_ARGS在将输入字符串转换为数字的代码中使用 -atoi这就是你所需要的。

也许像:

#define MINIMUM_ARGS 3

int main(int argc, char** argv)
{
    int i = 0;
    int calc = 0;
    if ((strcmp(argv[1], "SUB") == 0 || strcmp(argv[1], "ADD") == 0) && (argc >= MINIMUM_ARGS))
    {
        calc = atoi(argv[2]);
        for (i = 3; i < argc; i++)
        {
            if (strcmp(argv[1], "SUB") == 0)
            {
              calc -= atoi(argv[i]);
            }
            else
            {
              calc += atoi(argv[i]);
            }

        }
        printf("Result: %d\n", calc);

    }
}

推荐阅读