哟!所以我开始学习如何自己编码,对于这个练习,我必须创建一个函数,根据作为参数输入的整数符号显示“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;
}
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;
}
#包括
void ft_is_negative(int n) { if (n >= 0) { write(1, "P", 1); } } else { 写(1, "N", 1); } }