我的程序需要在命令行参数中接受非负整数。 我还必须使用
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)