0

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

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

4

2 回答 2

3

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

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

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


我猜在<cs50.h>,有一行:

typedef char *string;

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

int main(int argc, char* argv[])
于 2013-11-05T03:21:17.957 回答
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)
于 2013-11-05T03:20:11.573 回答