检查负argv无效的程序?

时间:2013-11-05 03:14:24

标签: c argv cs50

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

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的确切声明),为什么这个当前代码错了?

2 个答案:

答案 0 :(得分:4)

argv是一个字符串数组,因此您需要一个函数将字符串转换为整数,atoi是您要查找的函数。

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

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


我想在<cs50.h>中有一行:

typedef char *string;

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

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

答案 1 :(得分:2)

因此。两件事。

int main(int argc, string argv[])

注意argv的类型。它是一个长度未知(0到n)的叮咬数组。

接下来请注意:

if (argv[1] < 0)

这是字符串和int之间的比较运算符。现在,字符串可以很容易地具有整数值(一旦你足够下去,一切都是位)所以..如果字符串的值小于0,它将按照你的预期进行。问题是这可能永远不会发生。毋庸置疑,C会允许你这样做,因为键入它有点......好吧......如果你做比较字符串和整数的话就不在乎。

您可以在这里查看:Converting string to integer C,它将帮助您了解如何将字符串转换为整数值。

从以上链接的SO问题中快速发挥作用:

int num = atoi(s);

所以你可以改为......

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

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