我想在C++中创建一个命令行应用程序,我想确保输入是某个命令参数后的整数。如何检查是否argv [count]是一个整数
对于这个例子,我想检查下一个参数是否是“-p”命令参数后的整数。这里是我的代码片段。
while (count < argc){
if (strcmp("-p", argv[count]) == 0){
has_p = true; //Boolean
pid = atoi(argv[count + 1]);
if (pid == 0 && argv[count + 1] != "0"){
err = 1;
cout << "pid argument is not a valid input" << endl;
pid = -1;
}
count++;
}
...
}
现在,这个代码正确地捕获在该输入的错误:
- -p 1777
- -p SSS
- -p sss17
- -p [空格] -U
但在此输入格式下失败
- -p 17sss
我试图通过尝试使用sprintf的比较它来解决这个问题。不幸的是,使用char数组指针提供sprintf只会在buffer2中输出1个字符。
while (count < argc){
if (strcmp("-p", argv[count]) == 0){
has_p = true; //Boolean
pid = atoi(argv[count + 1]);
sprintf(buffer, "%d", pid);
sprintf(buffer2, "%d", *argv[count + 1]);
if (pid == 0 && argv[count + 1] != "0" || (buffer != buffer2)){
err = 1;
cout << "pid argument is not a valid input" << endl;
pid = -1;
}
count++;
}
...
}
有没有办法让sprintf读取整个char数组?如果没有,有没有更好的解决方案,除了循环指针,直到我点击“\ 0”
选择一种语言。你说C++,但是你使用C习语,并且问题用两者来标记。 –
['isdigit'](http://www.cplusplus.com/reference/cctype/isdigit/) – 101010
使用'strcmp'来比较两个字符串,而不是'!='。你可以使用'if(isdigit(argv [count]))'来检查参数是否是数字。 –