Проверить текст на несоответствие числа открывающих и закрывающих круглых скобок - C (СИ)
Формулировка задачи:
Дан текстовый файл f, содержащий программу на языке Си. Проверить эту программу на несоответствие числа открывающих и закрывающих круглых скобок:
Когда оператор программы занимает не более одной строки файла f
Когда оператор программы может занимать произвольное число строк файла
Если кто-нибудь, что-нибудь знает, то прошу написать, может быть есть какие то, идеи, не могу даже понять саму суть
Решение задачи: «Проверить текст на несоответствие числа открывающих и закрывающих круглых скобок»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
int main() {
const char CFile[] = "program.c";
FILE* f = fopen(CFile, "r");
int bracket = 0;
char ch;
if (f == NULL) {
perror(CFile);
return EXIT_FAILURE;
}
while ((0 <= bracket) && ((ch = fgetc(f)) != EOF)) {
switch (ch) {
case '(':
bracket++;
break;
case ')':
bracket--;
break;
}
}
fclose(f);
printf("%s\n", (bracket == 0) ? "Ok" : "Error");
return EXIT_SUCCESS;
}
Объяснение кода листинга программы
В этом коде проверяется корректность текста на наличие парных скобок.
- Первые 4 строки определяют файл, который нужно проверить, и открывают его для чтения.
- Следующая строка инициализирует переменную bracket = 0, которая отслеживает количество открытых скобок.
- В цикле while происходит чтение файла посимвольно.
- В операторе switch проверяется каждый символ:
- Если символ '(', то переменная bracket увеличивается на 1.
- Если символ ')', то переменная bracket уменьшается на 1.
- После цикла while файл закрывается.
- В последней строке выводится сообщение об ошибке или о корректности текста. Код проверяет, что парные скобки в тексте открываются и закрываются в нужном порядке. Если в конце текста останется открытая скобка, то выведется сообщение об ошибке.