创建一个根据输入的整数显示 N 或 P 的函数

问题描述 投票:0回答:2

哟!所以我开始学习如何自己编码,对于这个练习,我必须创建一个函数,根据作为参数输入的整数符号显示“N”或“P”。如果 n 为负数,则显示“N”。如果 n 为正数或空,则显示“P”。我已经成功地做到了这一点,并想出了一个有效的主要方法。允许的功能是写入(无 atoi 等)

void    ft_is_negative(int n)
{
    if (n >= 0)
    {
        write(1, "P", 1);
    }
    else
    {
        write(1, "N", 1);
    }
}

   int  main()
{
    int i;

    i = 200;
    ft_is_negative(i);
}

然而我一直在努力习惯在我的主程序中使用参数,但是当我使用它们时我一直在努力获得一个工作的主程序。在这里,有了这个我就可以得到马车(“ “),我就是不明白为什么(这可能很明显,但我看不到)。提前感谢您的帮助,如果您不想直接给我答案,那没关系,只需指出我请正确的方向。

void    ft_is_negative(int n)
{
    if (n >= 0)
    {
        write(1, "P", 1);
    }
    else
    {
        write(1, "N", 1);
    }
}

int main(int argc, char *argv[])
{
    if (argc != 2)
    {
        while (argv[1])
        {
            ft_is_negative(*argv[1]);
        }
    }
    write(1, "\n", 1);
    return 0;
}
c arguments
2个回答
0
投票
  • if (argc != 2)
    错了。如果您想检查是否恰好给出了 1 个参数,则应该是
    if (argc == 2)
  • while (argv[1])
    错了。这可能是一个无限循环,因为
    argv[1]
    在循环中没有更新。

要检查传递的值是否为负数,您应该检查:

  • 如果第一个字符是
    -
  • 之后还有
    0
    以外的字符
  • 没有无效字符

可以这样做:

int main(int argc, char *argv[])
{
    if (argc == 2)
    {
        char* p = argv[1];
        int is_minus = 0, contain_nonzero = 0, contain_invalid = 0, contain_valid = 0;
        if (*p == '-')
        {
            is_minus = 1;
            p++;
        }
        else if (*p == '+')
        {
            p++;
        }
        for (; *p != '\0'; p++)
        {
            if ('0' <= *p && *p <= '9')
            {
                contain_valid = 1;
                if (*p != '0') contain_nonzero = 1;
            }
            else
            {
                contain_invalid = 1;
            }
        }
        if (contain_invalid || !contain_valid)
        {
            /* contain invalid character or no character (except for sign) */
            write(1, "invalid", 7);
        }
        else if (is_minus && contain_nonzero)
        {
            /* contain minus sign and nonzero digit */
            ft_is_negative(-1);
        }
        else
        {
            /* contain digit, positive or zero (including minus zero) */
            ft_is_negative(0);
        }
    }
    write(1, "\n", 1);
    return 0;
}

0
投票

#包括

void ft_is_negative(int n) { if (n >= 0) { write(1, "P", 1); } } else { 写(1, "N", 1); } }

© www.soinside.com 2019 - 2024. All rights reserved.