Как сравнить указатель на символ ascii? - PullRequest
0 голосов
/ 07 июля 2019

Я пытаюсь написать функцию, которая проверяет, все ли скобки закрыты (равное количество открытых и закрытых) из аргумента командной строки. Это проверить на приемлемый ввод. ./main (10 + 10) с пробелами между ними, поэтому каждая скобка является собственным токеном в командной строке. Чтобы убедиться, что аргумент командной строки не похож на ./main (10 + 10

Я попытался изменить '(' на 40 и ')' на 41. Я пытался использовать argv [i] вместо * (argv + i), но у меня нет большого опыта работы с указателями. (Я родом из Java).

int main (int argc, char **argv) {

  int i;
  char *outputBase;
  char *helpFlag;
  char **equation;

  equation = NULL;
  /*check for validity of inputs*/
  if (checkAmtArgs(argc) == false || checkParens(argc, argv) == false) {
    exit(EXIT_FAILURE);
  }

  for (i = 1; i < argc; i++) {
    if (isNumber(argv[i])){
      strcat(*equation, *(argv + i));
    } else if (isOperator(argv[i])) {
      strcat(*equation, *(argv + i));
    } else if (isBase(argv[i])) {
      outputBase = argv[i];
    } else if (isFlag(argv[i])) {
      helpFlag = argv[i];
    } else {
      printf("%s\n", "Exiting program");
      exit(EXIT_FAILURE);
    }
  }

  return 0;
}

/*check for valid number of parantheses*/
int checkParens(int argc, char **argv) {
  int i;
  int result;

  int openParen;
  int closeParen;

  openParen = 0;
  closeParen = 0;

  for (i = 0; i < argc; i++) {
    if (*(argv + i) == '(' ) {
      openParen++;
    } else if (*(argv + i) == ')' ){
      closeParen++;
    }
  }

  if (openParen != closeParen) {
    result = false;
    printError(errorNum, 10);
  } else {
    result = true;
  }

  return result;
}
main.c: In function ‘checkParens’:
main.c:67:21: warning: comparison between pointer and integer
     if (*(argv + i) == '(' ) {
                     ^~
main.c:69:28: warning: comparison between pointer and integer
     } else if (*(argv + i) == ')' ){

1 Ответ

0 голосов
/ 07 июля 2019

Вы должны использовать ** (argv + i), т.е. две звездочки, поскольку вы создали указатель на указатель.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...