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

C 创建一个函数,根据输入的整数显示N或P,c,arguments,C,Arguments,哟!!因此,我开始学习如何自己编写代码,在本练习中,我必须创建一个函数,根据作为参数输入的整数符号显示“N”或“P”。如果n为负数,则显示“n”。如果n为正或为空,则显示“P”。我已经设法做到了这一点,并提出了一个主要的工作。允许的函数为写入(无atoi等) 然而我一直试图习惯在main中使用参数,但在使用参数时,我一直在努力获得一个工作的main。在这里,用这个我只得到了马车(“\n”),我只是不明白为什么(这可能很明显,但我看不到)。提前谢谢你的帮助,如果你不想直接给我答案没关系,请告诉我正

哟!!因此,我开始学习如何自己编写代码,在本练习中,我必须创建一个函数,根据作为参数输入的整数符号显示“N”或“P”。如果n为负数,则显示“n”。如果n为正或为空,则显示“P”。我已经设法做到了这一点,并提出了一个主要的工作。允许的函数为写入(无atoi等)

然而我一直试图习惯在main中使用参数,但在使用参数时,我一直在努力获得一个工作的main。在这里,用这个我只得到了马车(“\n”),我只是不明白为什么(这可能很明显,但我看不到)。提前谢谢你的帮助,如果你不想直接给我答案没关系,请告诉我正确的方向

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;
}
  • 如果(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;
}
intmain(intargc,char*argv[])
{
如果(argc==2)
{
char*p=argv[1];
int为负=0,包含非零=0,包含无效=0,包含有效=0;
如果(*p=='-')
{
是_减=1;
p++;
}
else if(*p=='+'))
{
p++;
}
对于(;*p!='\0';p++)
{

如果('0'
if(argc!=2)
检查此条件。尝试给出2个参数(lile
/a.out hoge fuga
),您将得到一个INIFIMENT
P
s或
N
s。如果
argc==2
(因此argv[1]可用),您可能想执行操作,而不是如果
argc!=2
(argv[1]可能不可用)。我不理解while循环的意图。但我假设您需要像
/program-123
这样的输入,因此您可能希望传递像
atoi(argv[1])
(整数-123),而不是
*argv[1]
,后者将是输入的第一个字符的值(破折号字符的值45)。是否允许使用标准库函数(如
atoi()
)?@MikeCAT不允许使用标准库函数(非常确定我必须自己编写一个atoi)@MikeCAT你说得对,当我设置时,我确实会得到一个无限循环(argc==2)所以我可能做错了什么谢谢!我知道我哪里做错了
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;
}