C语言 检查负 argv 不工作的程序



我的程序需要在命令行参数中接受非负整数。 我还必须使用

int main(int argc, string argv[])

以声明主。

我的代码:

#include <stdio.h>
#include <cs50.h>
int main(int argc, string argv[])
{
    if (argv[1] < 0)
    {
        printf("Give one non-negative integer.n");
        return 1;
    }
}

我的问题:当我输入-1作为命令行参数时,我的程序不会printf或停止运行。 它继续下一个代码块。 我能做些什么来修复它(请记住,我需要保留 main 的确切声明),为什么当前的代码是错误的?

argv是一个

字符串数组,所以你需要一个函数将字符串转换为整数,atoi是你要找的函数。

if (atoi(argv[1]) < 0)

在实际代码中,您可以检查无效的命令行参数。


我想在<cs50.h>,有一句话:

typedef char *string;

您应该知道,声明main的正常方式是:

int main(int argc, char* argv[])

所以,两件事。

int main(int argc, string argv[])

请注意 argv 的类型。它是长度未知(0 到 n)的刺痛数组。

接下来请注意:

if (argv[1] < 0)

这是字符串和整数之间的比较运算符。现在,字符串可以很容易地有整数值(一旦你走得足够远,一切都是位),所以。如果字符串的值小于 0,它将按预期执行。问题是这可能永远不会触发。不用说,C 将允许您执行此操作,因为键入它有点......井。。。它不会在乎你是否做一些类似比较字符串和整数的事情。

你可以看看这里: 将字符串转换为整数 C,这将帮助您了解如何将字符串转换为整数值。

从上面链接的 SO 问题中快速发挥:

int num = atoi(s);

所以你可以改做...

if (atoi(argv[1]) < 0)

int argument = atoi(argv[1])
if (argument < 0)

最新更新