Печать всех вводимых строк, содержащих более 80 символов - C (СИ)

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

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

Упражнение 1.17. Напишите программу печати всех вводимых строк, содержащих более 80 символов. Такого варианта решения вроде не видел, работает нормально. Меня интересует один очень простой вопрос: куда девается символ \n? Ведь после ввода очередной строки я жму на ENTER, чтобы перейти на другую строку. Следовательно, между строками должен быть символ \n. Но сколько не тестировал программу этот символ не приплюсовывается к длине ни предыдущей ни последующей строки. Однако же когда идёт вывод массива longest в терминале, то мы видим, что строки печатаются каждая с новой строки, то есть в массив эти символы \n тоже по всей видимости записываются. В моём понимании как бы так должно быть: 1010\n (5 символов) 1010 Либо так: 1010 \n1010 (5 символов) Но на практике этих символов словно вообще не существует в моих программах: 1010 ( 4 символа) 1010 (4 символа) Хотя в getline там даже вроде бы четко прописано, что символ \n надо скопировать и подсчитать его. Не понятно.
/*!!!(доработанная версия)Программа печатает строки длиной более 80ти символов*/
 
#include  //Библиотека ввода/вывода.
#include //Библиотека, отвечающая за локализацию (поддержку русского языка).
 
int getline(char line[], int lim);
void copy(char to[], char from[], int flag);
#define MAXLINE 10000 //максимальный размер одной строки 10 000 символов
main()
{
    setlocale(LC_ALL, "RUS");
    int len;
    int max; // переменная, в которую будет запоминаться кол-во уже занятых ячеек массива longest
    char line[MAXLINE];//текущая строка
    char longest[1000000]; //это массив, куда будут копироваться строки длиной более 80ти символов, суммарных размер этих строк не может превышать 1 млн символов
    max = 0;
    int c;
 
    while ((len = getline(line, MAXLINE)) > 0)//пока длины строк больше нуля
    {
        if ((len - 1) > 80)
        {
            copy(longest, line, max);
            max = max + len;
        }
    }
    if (max > 80)
        printf("\nСтроки длиннее 80ти символов:\n\n%s\nРабота программы завершена, нажмите любую клавишу.", longest);
    else
        printf("\nСтрок длиннее 80ти символов не обнаружено.\nРабота программы завершена, нажмите любую клавишу.");
 
    _getch();
    return 0;
}
 
int getline(char s[], int lim) {
    int c, i;
    for (i = 0; i < (lim - 1) && (c = getchar()) != EOF && c != '\n'; ++i)
        s[i] = c;
    if (c == '\n') {
        s[i] = c;
        ++i;
    }
    s[i] = '\0';
    return i;
}
 
void copy(char to[], char from[], int flag)
{
    int i;
    i = 0;
    while ((to[i + flag] = from[i]) != '\0')
        ++i;
}

Решение задачи: «Печать всех вводимых строк, содержащих более 80 символов»

textual
Листинг программы
    while ((len = getline(line, MAXLINE)) > 0)//пока длины строк больше нуля
    {
        for (int i = 0; i < len; i++)
            printf("%d ", (int)line[i]);
        printf("\r\n");
        if ((len - 1) > 80)
        {
            copy(longest, line, max);
            max = max + len;
        }
    }

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

  1. В коде используется функция getline(), которая предназначена для чтения ввода пользователя по строке и сохраняет его в переменную line.
  2. Затем код проверяет длину строки с помощью len = strlen(line).
  3. Если длина строки больше 80 символов, код копирует эту строку в другую переменную longest с помощью функции copy().
  4. Переменная max используется для отслеживания максимальной длины строки, которую необходимо скопировать.
  5. Затем код выводит скопированную строку с помощью printf(%s\n, longest);.

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


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

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

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