我的程序需要在命令行参数中接受非负整数。我也必须使用
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的确切声明),为什么这个当前代码错了?
答案 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)