Parse error before `int' - C (СИ)
Формулировка задачи:
ошибка [Error] C:\Users\Sony\Desktop\6.c:54: parse error before `int'
#include <stdio.h> #include <string.h> int checkVar (char s[3]) { if ((((s[0] <= 90) && (s[0] >= 65)) || ((s[0] >= 97) && ( s[0] <= 122))) && (s[1] == 32)) return 1; printf ("Perem napis ne prav"); return 0; } int chekLeft(char s[3]) { return checkVar(s); } int checkRight ( char s[255]) { int i, j; char s1[3], s2[3], s3[3]; if ((strlen(s) == 9) && (s[2] ==':') && (s[3] == '=') && ((s[6] == '+') || (s[6] == '-') || (s[6] == '*'))) { for (i = 0; i < 2; i++) { s1[i] = s[i]; s2[i] = s[i + 4]; s3[i] = s[i + 7]; s1[3] = '\0'; s2[3] = '\0'; s3[3] = '\0'; } return checkVar(s1)*checkVar(s2)*checkVar(s3); } if ((strlen(s) == 6) && (s[2] ==':') && (s[3] == '=')) { for (i = 0; i < 2; i++) { s1[i] = s[i]; s2[i] = s[i + 4]; s1[3] = '\0'; s2[3] = '\0'; } return checkVar(s1)*checkVar(s2); } printf ("oshibka zapisi"); return 0; } int checkAssign (char s[255]) { int i, j; char s1[3]; char s2[255]; for (i = 0; i < strlen(s); i++) { if ((s[i] ==':') && (s[i + 1] == '=')) { strncpy(s1, s, 2); s1[3] = '\0'; for (j = i + 2; j < strlen(s); j++) s2[j -i - 2] = s[j]; s2[j+1] = '\0'; return checkLeft(s1)* checkRight(s2); } printf ("Nekorrektna zapis"); return 0; } int checkLinear(char s[255]) { int i, j; for (i = 0; i < strlen(s); i++) if (s[i] == ';') { for (j = 0; j < i; j++) s1[j] = s[j]; s1[j+1] = '\0'; for (j = i + 2; j < strlen(s); j++) s2[j-i-2] = s[j]; s1[j+1] = '\0'; return checkAssign(s1)*checkAssign(s2); } return checkAssign(s); } int main () { char s[255]; s[35] = "X :=A ;Y :=X +A ;I :=X -X ;Z :=Z *G "; checkLinear(s); return 0; }
Решение задачи: «Parse error before `int'»
textual
Листинг программы
#include <stdio.h> #include <string.h> int checkVar (char s[3]) { if ((((s[0] <= 90) && (s[0] >= 65)) || ((s[0] >= 97) && ( s[0] <= 122))) && (s[1] == 32)) return 1; printf ("Perem napis ne prav"); return 0; } int checkLeft(char s[3]) { return checkVar(s); } int checkRight ( char s[255]) { int i, j; char s1[3], s2[3], s3[3]; if ((strlen(s) == 9) && (s[2] ==':') && (s[3] == '=') && ((s[6] == '+') || (s[6] == '-') || (s[6] == '*'))) { for (i = 0; i < 2; i++) { s1[i] = s[i]; s2[i] = s[i + 4]; s3[i] = s[i + 7]; s1[3] = '\0'; s2[3] = '\0'; s3[3] = '\0'; } return checkVar(s1)*checkVar(s2)*checkVar(s3); } if ((strlen(s) == 6) && (s[2] ==':') && (s[3] == '=')) { for (i = 0; i < 2; i++) { s1[i] = s[i]; s2[i] = s[i + 4]; s1[3] = '\0'; s2[3] = '\0'; } return checkVar(s1)*checkVar(s2); } printf ("oshibka zapisi"); return 0; } int checkAssign (char s[255]) { int i, j; char s1[3]; char s2[255]; for (i = 0; i < strlen(s); i++) if ((s[i] ==':') && (s[i + 1] == '=')) { strncpy(s1, s, 2); s1[3] = '\0'; for (j = i + 2; j < strlen(s); j++) s2[j -i - 2] = s[j]; s2[j+1] = '\0'; return checkLeft(s1)* checkRight(s2); } printf ("Nekorrektna zapis"); return 0; } int checkLinear(char s[255]) { int i, j; char s1[3]; char s2[255]; for (i = 0; i < strlen(s); i++) if (s[i] == ';') { for (j = 0; j < i; j++) s1[j] = s[j]; s1[j+1] = '\0'; for (j = i + 2; j < strlen(s); j++) s2[j-i-2] = s[j]; s1[j+1] = '\0'; return checkAssign(s1)*checkAssign(s2); } return checkAssign(s); } int main () { char s[255]; s[5] = "X :=A "; checkLinear(s); return 0; }
Объяснение кода листинга программы
- В этом коде реализована функция
checkVar
, которая принимает на вход массив из трех символов и проверяет, является ли первый символ буквой латинского алфавита (заглавной или строчной), второй символ - пробелом, а третий символ - числом. Если это условие выполняется, функция возвращает 1, иначе выводит сообщение об ошибке и возвращает 0. - В функции
checkLeft
происходит проверка переменной по типу, аналогичной функцииcheckVar
, и возвращается результат этой проверки. - В функции
checkRight
проверяется корректность записи выражения в видеs[6] == '+', s[6] == '-', s[6] == '*'
. Если это условие выполняется, функция разделяет строку на подстроки и рекурсивно вызывает функциюcheckVar
для каждой подстроки. Итоговый результат вычисления выражения записывается в переменнуюcheckVar
. - В функции
checkAssign
происходит проверка корректности записи выражения в видеs[i] == ':', s[i + 1] == '='
. Если это условие выполняется, функция разделяет строку на подстроки и рекурсивно вызывает функциюcheckLeft
иcheckRight
для каждой подстроки. Итоговый результат вычисления выражения записывается в переменнуюcheckVar
. - В функции
checkLinear
происходит проверка корректности записи выражения в видеs[i] == ';'. Если это условие выполняется, функция разделяет строку на подстроки до и после символа
;, и рекурсивно вызывает функцию
checkAssignдля каждой подстроки. Итоговый результат вычисления выражения записывается в переменную
checkVar`. - В функции
main
создается тестовая строкаX :=A
, которая передается в функциюcheckLinear
. Эта функция проверяет корректность записи выражения и выводит сообщение об ошибке или результат вычисления, в зависимости от того, было ли найдено синтаксическое или логическое нарушение. - Заголовочный файл
<stdio.h>
используется для ввода и вывода данных в консоль с помощью функцийprintf
иscanf
. - Заголовочный файл
<string.h>
используется для работы со строками, в частности, для функцииstrlen
, которая вычисляет длину строки. - В этом коде используются переменные
s[3]
,s1[3]
,s2[3]
,s3[3]
, которые являются массивами символов размером 3. Это позволяет работать с подстроками длиной не более 3 символов. - В этом коде используются переменные
i
,j
, которые являются счетчиками для циклов. - В этом коде используются переменные
s1
,s2
,s3
, которые являются копиями подстрок из исходной строки. - В этом коде используются условные операторы
if
,else if
,else
, которые позволяют выполнять различные проверки и вычисления в зависимости от условий. - В этом коде используются операторы присваивания
=
, которые позволяют присваивать значения переменным. - В этом коде используются операторы сравнения
==
, которые позволяют сравнивать значения переменных. - В этом коде используются операторы конкатенации строк
s1[j+1] = '\0';
, которые позволяют объединять подстроки в одну строку. - В этом коде используются функции
strncpy
, которые позволяют копировать подстроки из одной строки в другую. - В этом коде используются функции
printf
иscanf
, которые позволяют выводить данные в консоль и считывать данные из консоли. - В этом коде используется функция
main
, которая является точкой входа в программу и выполняет основные вычисления. - В этом коде используется функция
checkVar
, которая проверяет корректность записи переменной. - В этом коде используется функция
checkAssign
, которая проверяет корректность записи выражения в видеs[i] == ':', s[i + 1] == '='
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д