Сначала аргументы командной строки могут состоять из нескольких символов. Поэтому вам придется перебирать все из них:
for(char* arg = argv[1]; *arg; ++arg)
Теперь я предполагаю, что вы хотите классифицировать строку, содержащую любой нецифровый символ, как нечисловой, поэтому внутриВ цикле вы должны проверять каждый символ на наличие цифр:
if(!isdigit(static_cast<unsigned char>(*arg)))
{
// non-number-string!
break; // no need to go on...
}
В другом варианте можно просто попытаться привести к числу:
std::istringstream s(argv[1]);
int n;
s >> n;
if(s) // number read?
{
char c;
s >> c;
if(!s.eof())
{
// not last character reached!
// -> no number
}
}
Или:
char* end;
long number = strtol(argv[1], &end, 10);
// ^ needed for detecting, if end of string reached
if(*end || errno == ERANGE)
{
// doesn't point to terminating null character -> no number
// or number read was out of range
}
Вариант в стиле C:
int n, int l;
if(sscanf(argv[1], "%d%n", &n, &l) == 1 && argv[1][l] == 0)
{
// successfully scanned an integer and end of string reached -> is a number
}