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;
    }

Объяснение кода листинга программы

  1. В этом коде реализована функция checkVar, которая принимает на вход массив из трех символов и проверяет, является ли первый символ буквой латинского алфавита (заглавной или строчной), второй символ - пробелом, а третий символ - числом. Если это условие выполняется, функция возвращает 1, иначе выводит сообщение об ошибке и возвращает 0.
  2. В функции checkLeft происходит проверка переменной по типу, аналогичной функции checkVar, и возвращается результат этой проверки.
  3. В функции checkRight проверяется корректность записи выражения в виде s[6] == '+', s[6] == '-', s[6] == '*'. Если это условие выполняется, функция разделяет строку на подстроки и рекурсивно вызывает функцию checkVar для каждой подстроки. Итоговый результат вычисления выражения записывается в переменную checkVar.
  4. В функции checkAssign происходит проверка корректности записи выражения в виде s[i] == ':', s[i + 1] == '='. Если это условие выполняется, функция разделяет строку на подстроки и рекурсивно вызывает функцию checkLeft и checkRight для каждой подстроки. Итоговый результат вычисления выражения записывается в переменную checkVar.
  5. В функции checkLinear происходит проверка корректности записи выражения в виде s[i] == ';'. Если это условие выполняется, функция разделяет строку на подстроки до и после символа;, и рекурсивно вызывает функциюcheckAssignдля каждой подстроки. Итоговый результат вычисления выражения записывается в переменнуюcheckVar`.
  6. В функции main создается тестовая строка X :=A, которая передается в функцию checkLinear. Эта функция проверяет корректность записи выражения и выводит сообщение об ошибке или результат вычисления, в зависимости от того, было ли найдено синтаксическое или логическое нарушение.
  7. Заголовочный файл <stdio.h> используется для ввода и вывода данных в консоль с помощью функций printf и scanf.
  8. Заголовочный файл <string.h> используется для работы со строками, в частности, для функции strlen, которая вычисляет длину строки.
  9. В этом коде используются переменные s[3], s1[3], s2[3], s3[3], которые являются массивами символов размером 3. Это позволяет работать с подстроками длиной не более 3 символов.
  10. В этом коде используются переменные i, j, которые являются счетчиками для циклов.
  11. В этом коде используются переменные s1, s2, s3, которые являются копиями подстрок из исходной строки.
  12. В этом коде используются условные операторы if, else if, else, которые позволяют выполнять различные проверки и вычисления в зависимости от условий.
  13. В этом коде используются операторы присваивания =, которые позволяют присваивать значения переменным.
  14. В этом коде используются операторы сравнения ==, которые позволяют сравнивать значения переменных.
  15. В этом коде используются операторы конкатенации строк s1[j+1] = '\0';, которые позволяют объединять подстроки в одну строку.
  16. В этом коде используются функции strncpy, которые позволяют копировать подстроки из одной строки в другую.
  17. В этом коде используются функции printf и scanf, которые позволяют выводить данные в консоль и считывать данные из консоли.
  18. В этом коде используется функция main, которая является точкой входа в программу и выполняет основные вычисления.
  19. В этом коде используется функция checkVar, которая проверяет корректность записи переменной.
  20. В этом коде используется функция checkAssign, которая проверяет корректность записи выражения в виде s[i] == ':', s[i + 1] == '='.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.889 из 5