gpt4 book ai didi

c - 如何检查命令行参数是否为整数

转载 作者:行者123 更新时间:2023-12-05 01:34:26 25 4
gpt4 key购买 nike

首先,我说的是用 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;
}

最佳答案

最简单的方法是迭代 argv[n]并一一传给他们 strtol() 或类似。然后,检查错误并做出决定。引用 man page ,(强调我的)

long int strtol(const char *nptr, char **endptr, int base);

[...]

If endptr is not NULL, strtol() stores the address of the first invalid character in *endptr. If there were no digits at all, strtol() stores the original value of nptr in *endptr (and returns 0). In particular, if *nptr is not '\0' but **endptr is '\0' on return, the entire string is valid.


也就是说, program < integer_1 integer_2不完全是传递命令行参数的方式。如果您想将 values 参数作为命令行参数传递,您将丢失重定向运算符并使用 argcargv[n]直接..

关于c - 如何检查命令行参数是否为整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40837851/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com