首先,我正在谈论使用gcc编译的旧式ANSI-C(我的意思是ANSI标准,没有C99或更新版本)。我只允许使用下面代码中可以看到的库。如何检查命令行参数是否为整数
我的问题是我有一个被称为以如下方式对终端程序:
program < integer_1 integer_2
虽然我已经能够找出如何检查参数的数目,我被困在检查这些是否是整数。 如果程序被称为像这样:
program < 1 -13
它应该运行没有抱怨,但如果像这样运行:
program < s 7
应该抛出一个错误。
无论我到目前为止尝试过的是完全垃圾。如果第二个数字是一个字符,我迄今为止管理的最好的事情就是一个错误消息。我的尝试中没有一个能够处理多个数字,但我已经找到了原因。
问题是我现在还没有使用任何编程语言的命令行/终端参数(C++,Java)。我真的很感激,如果有人能告诉我如何检查正确的输入,坦白地说,我是出于想法。
我正确的说,如果我想处理大于9的数字,我必须从索引2开始遍历argv,直到找到空格为止?
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
int main(int arc, char *argv[])
{
if(arc != 3)
{
printf("Error: You have entered %d arguments, but two were expected!", arc - 1);
return -1;
}
return 0;
}
所有的命令行参数都是字符串。你可以使用'atoi()'将字符串转换为整数,而不需要检查错误,或者使用'strtol()'或它的一个亲属来准确敏感但非常[微妙的错误检查](http://stackoverflow.com/questions/14176123 /正确的用法 - 的 - 与strtol)。注意你的命令行显示了一个'<',这意味着shell试图使用下一个参数(例子中的'1'和's')给出的文件重定向标准输入,并删除'<'和命令行中的文件名。您应该简单地删除'<'符号。 –