Я пытаюсь убедиться, что все аргументы, переданные в 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. Если бы кто-то мог указать мне правильное направление, это было бы здорово! Если нужно больше разъяснений, просто спросите.
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 }
У вас есть три ошибки:
while (str != 0)
должно быть while (*str != 0)
, Вы хотите продолжить, пока не встретите ноль в строке, а не до тех пор, пока сама строка не исчезнет.
if( (isdigit(str)) )
должно быть if( (isdigit(*str++)) )
, Вы хотите посмотреть на что str
указывает на и посмотреть, если это цифра, и вам нужно указать на следующую цифру.
32 return true;
Этого не должно быть там. Вы не хотите возвращаться только потому, что вы нашли одну цифру.
При сравнении каждого символа логика должна быть, если она недопустима, вернуть false, в противном случае продолжить:
bool legal_int(char *str)
{
while (str != 0)
{
if (!isdigit(*str))
{
return false;
}
str++;
}
return true;
}
Как насчет:
bool legal_int(char *str) {
while (*str)
if (!isdigit(*str++))
return false;
return true;
}
Это не лучшая функция, но она должна служить цели. isdigit
функция нуждается в символе, чтобы посмотреть на так передать *str
, Другой ключевой момент заключается в том, что вам нужно продвинуть указатель внутри цикла.