проверка, является ли argv [i] допустимым целым числом, передавая аргументы в main

Я пытаюсь убедиться, что все аргументы, переданные в main, являются действительными целыми числами, и если нет, я выведу ошибку. Например, если у меня есть исполняемый файл с именем total, я бы ввел total 1 2 3 4.
Я хочу напечатать ошибку, если есть неверное целое число, поэтому, если я введу итоговое значение 1 2 3zy, будет напечатано сообщение об ошибке. Мой код выглядит следующим образом.

  1 #include <iostream>
2 #include<stdlib.h>
3 using namespace std;
4
5 bool legal_int(char *str);
6
7 int main(int argc, char *argv[])
8 {
9  //int total = 0;
10  for(int i = 1; i < argc; i++)
11  {
12   if( (legal_int(argv[i]) == true) )
13   {
14    cout << "Good to go" << endl;
15   }
16   else
17   {
18    cerr << "Error: illegal integer." << endl;
19    return 1;
20   }
21  }
22
23   // int value = atoi(argv[i]);
24   //cout << value << endl;
25 }
26
27 bool legal_int(char *str)
28 {
29  while(str != 0) // need to
30  if( (isdigit(str)) )// do something here
31  {
32   return true;
33  }
34  else
35  {
36   return false;
37  }
38 }

Что мне нужно знать, так это как я могу индексировать все символы в строке и убедиться, что они являются цифрами с функцией legal_int. Если бы кто-то мог указать мне правильное направление, это было бы здорово! Если нужно больше разъяснений, просто спросите.

1

Решение

27 bool legal_int(char *str)
28 {
29  while(str != 0) // need to
30  if( (isdigit(str)) )// do something here
31  {
32   return true;
33  }
34  else
35  {
36   return false;
37  }
38 }

У вас есть три ошибки:

  1. while (str != 0) должно быть while (*str != 0), Вы хотите продолжить, пока не встретите ноль в строке, а не до тех пор, пока сама строка не исчезнет.

  2. if( (isdigit(str)) ) должно быть if( (isdigit(*str++)) ), Вы хотите посмотреть на что str указывает на и посмотреть, если это цифра, и вам нужно указать на следующую цифру.

  3. 32 return true; Этого не должно быть там. Вы не хотите возвращаться только потому, что вы нашли одну цифру.

0

Другие решения

При сравнении каждого символа логика должна быть, если она недопустима, вернуть false, в противном случае продолжить:

bool legal_int(char *str)
{
while (str != 0)
{
if (!isdigit(*str))
{
return false;
}
str++;
}
return true;
}
3

Как насчет:

bool legal_int(char *str) {
while (*str)
if (!isdigit(*str++))
return false;
return true;
}

Это не лучшая функция, но она должна служить цели. isdigit функция нуждается в символе, чтобы посмотреть на так передать *str, Другой ключевой момент заключается в том, что вам нужно продвинуть указатель внутри цикла.

1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector