Update a1/program.c

This commit is contained in:
Marat Izmailov 2024-10-24 10:47:58 +00:00
parent 46666f11bc
commit e118e96953

View File

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