Я делаю это для балансировки скобок уравнения, но я думаю, что это неправильно проверить и исправить - PullRequest
0 голосов
/ 16 апреля 2010
int main(){
char i,input[30],close,open;
for(i=0;i<='.';i++){
  printf("enter equation");
  scanf("%c",input[i]);
  if(input[i]=='(')
    input++;
  input[i]=open;
  else if(input[i]==')')
    input[i]--;
  input[i]=close;
  else if(open[i]==close[i])
  {
    printf("parenthesis are balance");
  }
  else
    printf("parenthesis are not balance");
  }

  getch();
  return 0;
}

Ответы [ 2 ]

4 голосов
/ 16 апреля 2010

Если бы вы использовали отступ в своем коде, вы могли бы обнаружить проблемы намного проще:

int main()
{
    char i,input[30],close,open;
    for(i=0;i<='.';i++) // why i <= '.'? maybe you mean int i and input[i] != '.'...
    {
        printf("enter equation");
        scanf("%c",input[i]); // you need &input[i]. In fact, I think what you need is scanf("%s", input); but outside of this for loop...
        if(input[i]=='(')
            input++; // Do you mean input[i]++?
        input[i]=open; // this isn't inside the if condition. Use brackets if you want it to be
        else if(input[i]==')') // won't compile because there's no matching if
            input[i]--;
        input[i]=close; // not inside the else. Also, what is close and open? You don't initialize them
        else if(open[i]==close[i]) // open and close are not arrays. You can't use them like this
        {
            printf("paranthesis are balance");
        }
        else
            printf("paranthesis are not balance");
    }

    getch();
    return 0;
}

Там много чего не так. Я предлагаю прочитать учебник. Этот , например. Вы можете Google для больше с "Учебник C"

0 голосов
/ 16 апреля 2010

Техника, которую я бы использовал, состоит в том, чтобы пройти через ввод, сохраняя счетчик скобок. Для каждого '(', увеличьте счетчик. Для каждого ')', уменьшите счетчик и проверьте, не отрицателен ли он (чтобы определить такие вещи, как "()) (()", который имеет одинаковое количество левой и правой частей, но не сбалансированы). Если в какой-то момент счетчик становится отрицательным, парены не сбалансированы, в противном случае они уравновешиваются, если счетчик равен нулю в конце.

Честно говоря, я совершенно не понимаю, чего вы пытаетесь достичь с помощью приведенного выше кода, и у меня есть большой опыт чтения кода для ученика С, поэтому все, что я могу вам дать, - это алгоритмический совет.

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