Печать всех вводимых строк, содержащих более 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; } }
Объяснение кода листинга программы
- В коде используется функция
getline()
, которая предназначена для чтения ввода пользователя по строке и сохраняет его в переменнуюline
. - Затем код проверяет длину строки с помощью
len = strlen(line)
. - Если длина строки больше 80 символов, код копирует эту строку в другую переменную
longest
с помощью функцииcopy()
. - Переменная
max
используется для отслеживания максимальной длины строки, которую необходимо скопировать. - Затем код выводит скопированную строку с помощью
printf(
%s\n, longest);
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д