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