Исправить синтаксические ошибки в коде - C (СИ)

Узнай цену своей работы

Формулировка задачи:

нужно исправить ошибки(они подчеркнуты красным) см фото
#include <stdio.h>
#include <string.h>
#include<locale.h>  
#include <ctype.h>
#define N 30
#define M 21
int main()
{
    char str[N][M];
    int i, i1 = 0, j, v,y;
    i = 0;
    j = 0;
    setlocale(LC_ALL, "Russian");
    printf("Введите предложение\n");
    while (1)
    {
        v = getchar();
        if ((v == '!') || (v == '?') || (v == '.') || (v == '\n'))
        {
            str[i][j] = '\0';
            i++;
            y = i;
            break;
        }
        if ((v >= 'a') && (v <= 'z') || (v >= 'A') && (v <= 'Z') || (v == ' '))
        {
        }
        else
        {
            printf("Ошибка:недопустимый символ\n");
            return 0;
        }
        if (v != ' ')
        {
            str[i][j++] = v;
        }
        if (j > 21)
        {
            printf("Ошибка:слишком длинное слово\n");
            return 0;
        }
 
        if (v == ' ')
        {
            str[i][j++] = '\0';
            i++;
            j = 0;
        }
        if (i > 31)
        {
            printf("Ошибка:слишком длинное предложение\n");
            return 0;
        }
    }
    printf("Ваше предложение\n");
    for (i1 = 0; i1 < y; i1++)
    {
        for (j = 0; str[i1][j]; j++)
            printf("%c", str[i1][j]);
        printf(" ");
    }
    _getch();
 
    bool newWord = true; // это переменная типа булево, принимает значения "Ложь" или "Истина"
    for (i = 0; i < strlen(str); i++) // цикл по всей длине строки-массива
    {
        if (str[i][j] == ' ') // если текущий символ строки равен пробелу
            newWord = true; // ставим значение "Истина" для переменной newWord
        if (str[i][j] >= 'A' && str[i][j] <= 'Z') // если текущий символ в верхнем регистре анг. алфавита
            if (newWord) // если переменная newWord равна "Истина"
            {
                str[i][j] = tolower(str[i][j]); // переводим текущий символ в нижний регистр
                newWord = false; // устанавливаем переменную newWord в значение "Ложь"
            }
    }
    printf("Измененное предложение\n");
    for (i1 = 0; i1 < y; i1++)
    {
        for (j = 0; str[i1][j]; j++)
            printf("%c", str[i1][j]);
        printf(" ");
    }
    _getch();
}

Решение задачи: «Исправить синтаксические ошибки в коде»

textual
Листинг программы
#include <stdio.h>
#include <string.h>
#include<locale.h>  
#include <ctype.h>
#define N 30
#define M 21
#define true 1
#define false 0
int main()
{
    char str[N][M];
    int bool;
    int i, i1 = 0, j, v,y;
    i = 0;
    j = 0;
    setlocale(LC_ALL, "Russian");
    printf("??????? ???????????\n");
    while (1)
    {
        v = getchar();
        if ((v == '!') || (v == '?') || (v == '.') || (v == '\n'))
        {
            str[i][j] = '\0';
            i++;
            y = i;
            break;
        }
        if ((v >= 'a') && (v <= 'z') || (v >= 'A') && (v <= 'Z') || (v == ' '))
        {
        }
        else
        {
            printf("??????:???????????? ??????\n");
            return 0;
        }
        if (v != ' ')
        {
            str[i][j++] = v;
        }
        if (j > 21)
        {
            printf("??????:??????? ??????? ?????\n");
            return 0;
        }
 
        if (v == ' ')
        {
            str[i][j++] = '\0';
            i++;
            j = 0;
        }
        if (i > 31)
        {
            printf("??????:??????? ??????? ???????????\n");
            return 0;
        }
    }
    printf("???? ???????????\n");
    for (i1 = 0; i1 < y; i1++)
    {
        for (j = 0; str[i1][j]; j++)
            printf("%c", str[i1][j]);
        printf(" ");
    }
    getch();
 
    // bool = true; // ??? ?????????? ???? ??????, ????????? ???????? "????" ??? "??????"
    for (i = 0; i < strlen(str); i++) // ???? ?? ???? ????? ??????-???????
    {
        if (str[i][j] == ' ') // ???? ??????? ?????? ?????? ????? ???????
            bool = true; // ?????? ???????? "??????" ??? ?????????? newWord
        if (str[i][j] >= 'A' && str[i][j] <= 'Z') // ???? ??????? ?????? ? ??????? ???????? ???. ????????
            if (bool==true) // ???? ?????????? newWord ????? "??????"
            {
                str[i][j] = tolower(str[i][j]); // ????????? ??????? ?????? ? ?????? ???????
                bool = false; // ????????????? ?????????? newWord ? ???????? "????"
            }
    }
    printf("?????????? ???????????\n");
    for (i1 = 0; i1 < y; i1++)
    {
        for (j = 0; str[i1][j]; j++)
            printf("%c", str[i1][j]);
        printf(" ");
    }
    getch();
}

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

  1. В начале кода объявлены массив символов str[N][M], переменные i, i1, j, v, y, bool и функция getchar().
  2. В цикле while(1) происходит чтение ввода пользователя, если символ является знаком препинания, то строка считается завершенной и выводится на экран.
  3. Если введенный символ является буквой, пробелом или знаками препинания, то он добавляется в строку.
  4. Если введенный символ не является пробелом, то вторая строка добавляется в массив.
  5. Если длина второй строки превышает 21 символ, выводится сообщение об ошибке и программа завершается.
  6. Если введенный символ является пробелом, то вторая строка добавляется в массив и первая строка переходит к следующей итерации.
  7. Если длина первой строки превышает 31 символ, выводится сообщение об ошибке и программа завершается.
  8. После завершения ввода выводится сообщение о количестве введенных строк.
  9. Для каждой строки выводится количество слов в строке.
  10. Для каждой строки выводится количество символов в строке.
  11. В цикле for проверяется каждый символ строки.
  12. Если символ является заглавной буквой, то он преобразуется в строчную букву.
  13. Если переменная bool равна true, то текущая строка считается новым словом.
  14. Если текущая строка является словом, то она преобразуется в нижний регистр.
  15. Если переменная bool равна true, то текущая строка считается новым словом.
  16. Выводится сообщение о количестве преобразованных строк.
  17. Для каждой строки выводится количество символов в строке.
  18. Ввод пользователя завершается, если введен символ новой строки.
  19. В цикле for проверяется каждый символ строки.
  20. Выводится количество символов в строке.

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


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

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

14   голосов , оценка 3.929 из 5
Похожие ответы