diff --git a/a1/program.c b/a1/program.c index bd9909c..6282f97 100644 --- a/a1/program.c +++ b/a1/program.c @@ -48,22 +48,27 @@ int main() { printf("Read: %s\n", code); + // Дополнительный массив для хранения индексов открывающих скобок + int indexStack[MAX_LEN]; + int indexTop = -1; + for (int i = 0; i < strlen(code); i++) { char c = code[i]; if (c == '(' || c == '{' || c == '[' || c == '<') { push(c); + indexStack[++indexTop] = i; // Сохраняем индекс открывающей скобки } else if (c == ')' || c == '}' || c == ']' || c == '>') { if (top == -1) { printf("Unexpected closing bracket %c in %d\n", c, i); - return 0; // Ожидается код завершения 0 + return 1; // Возвращаем 1 при ошибке } char lastOpen = pop(); + int lastIndex = indexStack[indexTop--]; // Извлекаем индекс соответствующей открывающей скобки if (!isMatchingPair(lastOpen, c)) { - // Используем i для вывода позиции, где найдена ошибка - printf("Crossed bracket %c in %d, expected %c\n", c, i + 1, matchingCloseBracket(lastOpen)); - return 0; // Ожидается код завершения 0 + printf("Crossed bracket %c in %d, expected %c\n", c, lastIndex + 1, matchingCloseBracket(lastOpen)); + return 1; // Возвращаем 1 при ошибке } } } @@ -75,9 +80,9 @@ int main() { printf("%c", matchingCloseBracket(stack[i])); } printf("\n"); - return 0; // Ожидается код завершения 0 + return 1; // Возвращаем 1 при ошибке } printf("All brackets OK\n"); - return 0; + return 0; // Возвращаем 0 при успехе }