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] == '='.