如何读取char argv输入并解析(检查)它是否为非整数

How to read an char argv input and parse(check) it for non-integers

本文关键字:检查 是否 整数 输入 何读取 读取 char argv      更新时间:2023-10-16

说我的命令行是a.out -a 3eF6

如果我访问argv[2],它会给我3eF6(我认为这是一个字符数组?)我如何循环检查每个字符都是整数,而不是像'e'或'F'这样的alpha值?

如何/如何将其转换为字符串?

我知道如果我做a = atoi(argv[2]),其中argv[2]是32,那么a = 32。我也知道,如果argv[2]是3eF6,那么以下不会导致"输入错误"。

 a = 0;
 a = atoi(argv[2])
if( a = 0 )
 cout << "wrong input";

相反,a将被计算为3。所以在这个例子中它只读取第一个整数,但是我想要能够访问整个参数,3eF6。

我已经尝试使用atoi(getline(argv[2], a),或等效的东西,但由于某种原因,我得到一个错误,说我不能转换字符串为const char。

无论如何,我如何将argv[2]转换为我可以解析的字符串?或者如何访问argv[2]中的每个字符?

我也试过了:

string string1 = argv[i+1] // argv[i] is an option like -a

但是在带参数运行程序时,我得到这个错误:

./a.out -b 2 -a 2 -s 2 -t 8

抛出std::logic_error实例后调用终止what(): basic_string::_S_construct NULL无效Abort (core dump)

TCHAR c;
int n(0);
int x(0);
int y(0);
for (x = 0; x < argc; ++x)
{
    // Loop through each character in the argument.
    n = _tcslen(argv[x]);
    for (y = 0; y < n; ++y)
    {
        c = argv[x][y];
        if (isdigit(c))
        {
            cout << c << "is a digit" << endl;
        }
        else
        {
            cout << c << "is not a digit" << endl;
        }
    }
}

最后,我创建了一个char指针来保存我的char命令行元素:

char* charString = argv[i+1];

传递给一个函数来解析

parser(charString);

在这种情况下,argv[i+1]相当于我问题中的argv[2]。我的解析器函数的函数定义如下所示:

    void parser(char* charString){
        for(int i=0; charString[i] != ''; i++){
                bool isAlpha = isalpha(charString[i]);
                bool isPunct = ispunct(charString[i]);
                if ((isAlpha == true)||(isPunct == true)){
                        printError();
                        exit(1);
                } else;
           }
     }
重要的是要注意,要在char数组的末尾结束解析,不能执行
for(int i=0; charString[i] < sizeof(charString); i++){

作为数组大小将总是返回8或9。相反,必须在求值的字符等于''时结束解析,或者换句话说,在字符charString[i]不等于''时进行解析。