命令行参数错误检查,查看整个参数是否为整数
Command Line Arguments error checking, see if whole argument is an integer
int main(int argc, char *argv[])
{
if(!isdigit(*argv[1]))
{
cerr << "Error msg" << endl;
return 1;
}
}
嘿伙计们,对于我程序的一部分,我必须检查第一个参数 (argv[1]( 是否是整数。如果给定的参数不是整数,它将打印出错误 msg 并退出程序,如果不是,则继续执行。我已经让我的程序在参数是常规字符串(例如 dzd 或 xy(时正确找到错误,但是当给定参数以数字开头(例如 1dzd 或 32st(时,它无法找到错误。我想知道你们中是否有人可以帮助我弄清楚如何更改或添加给定的代码以使其能够正确找到 1dzd 或 32st 等参数的错误?
谢谢!
一种方法
是使用istringstream
来检查是否可以转换为int
:
int val;
std::istringstream iss(argv[1]);
if(!(iss >> val)) {
cerr << "Error msg" << endl;
return 1;
}
您只检查第一个字符是否为数字。下面的代码将检查整个参数是否为数字。或者你可以只使用标准函数strtol。
char *ch = argv[1];
while(*(ch++) != 0) {
if(!isdigit(*argv[1]))
{
cerr << "Error msg" << endl;
return 1;
}
}
相关文章:
- 在C++中,使用带有 std::optional 参数的函数<T>来表示可选参数是否有意义?
- 如何检查给定的参数是否为 cv::noArray()?
- 如果返回 -1,时间() 的参数是否被修改?
- C++中大多数/所有 setter 函数的参数是否应该写为常量引用?
- 检查两个模板参数是否相同
- 空函数的参数是否加载到缓存中?
- 使用 lambda 作为构造函数参数是否需要C++ 17?
- 了解'this'或其他参数是否为右值
- const-ref传递的模板化参数是否经过优化,以便在足够小时按值传递
- shared_ptr构造函数参数是否应按值传递
- 如何检查模板参数是否为给定值?
- 使用聚合初始化模拟默认函数参数是否存在任何陷阱?
- 在对象序列化期间添加额外参数是否有更好的方法?
- 通过 ssh 发送参数.是否有非阻塞输入函数?
- 如何检查运算符 != 模板参数是否存在 C++ 17?
- 常量引用函数参数:是否可以禁止临时对象?
- 如何检查模板参数是否为 std::variant?
- 是否可以确定函数的参数是否已签名或无符号,以实现可能性超载函数
- 移动 l 值参考参数是否是一种不好的做法?
- 显式指定通用 lambda 的 operator() 模板参数是否合法?