Я пытаюсь создать приложение командной строки в 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. К сожалению, поставка sprintf указателем массива char выводит только 1 символ в buffer2.
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 читать весь массив символов? Если нет, есть ли лучшее решение для этого, кроме прокрутки указателя до тех пор, пока я не нажму «\ 0»
Выберите язык. Вы говорите C++, но вы используете идиомы C, и вопрос отмечен обоими. –
['isdigit'] (http://www.cplusplus.com/reference/cctype/isdigit/) – 101010
Используйте' strcmp' для сравнения двух строк, а не '! ='.Вы можете использовать 'if (isdigit (argv [count])), чтобы проверить, является ли аргумент цифрой. –