Я пытаюсь обработать ошибку аргументов командной строки с помощью функции, подобной этой:
int check(char *r){
int arg, valid = 0;
for (int i = 0; i<sizeof(*r); i++){
if(!isdigit(r[i]))
valid = 0;
else if (atoi(r)<1)
valid = 0;
else
valid = 1;
}
if (valid == 1)
arg = atoi(r);
while(valid == 0){
cout<<"Input was wrong! Please input a positive integer greater than 0: ";
cin>>arg;
if (arg<1 || cin.fail()){
cin.clear();
cin.ignore(1000, '\n');
valid = 0;
}
else
valid = 1;
}
return arg;
}
int main(int argc, char const *argv[]){
int player;
int row;
int col;
for (int i = 1; i<7; i+=2){
if(argv[i][0] == '-' && argv[i][1] == 'p'){
player = check( argv[i+1] );
}
else if (argv[i][0] == '-' && argv[i][1] == 'r'){
row = check( argv[i+1] );
}
else if (argv[i][0] == '-' && argv[i][1] == 'c'){
col = check( argv[i+1] );
}
else
cout<<"Enter -p <number of players> -r <number of rows> -c <number of columns> "<<endl;
}
}
Но он не скомпилируется, говоря, что не было соответствующего вызова функции для проверки. Примером того, что пользователь должен ввести, является "./a.out -p 2 -r 6 - c 7". Как лучше всего проверить, вводит ли пользователь только положительные целые числа в командной строке?
При компиляции компилятор выводит следующее сообщение:
main.cpp:41:15: error: no matching function for call to
'check'
player = check( argv[i+1] );
^~~~~
main.cpp:8:5: note: candidate function not viable: 1st
argument ('const char *') would lose const qualifier
int check(char *r){
^
main.cpp:44:12: error: no matching function for call to
'check'
row = check( argv[i+1] );
^~~~~
main.cpp:8:5: note: candidate function not viable: 1st
argument ('const char *') would lose const qualifier
int check(char *r){
^
main.cpp:47:12: error: no matching function for call to
'check'
col = check( argv[i+1] );
^~~~~
main.cpp:8:5: note: candidate function not viable: 1st
argument ('const char *') would lose const qualifier
int check(char *r){