Нужны объяснения примеров из книги "Язык программирования Си" Брайан Керниган, Деннис Ритчи - C (СИ)
Формулировка задачи:
Добры день.
Начал читать книгу "Язык программирования Си" Брайан Керниган, Деннис Ритчи; для лучшего усвоения использую приведенные примеры.
Есть загвоздка. Нужны комментарии, чтобы разобраться.
1.
Вот кусок кода из примера:
При компиляции выдаёт ошибку, что перед константой надо разделитель поставить.
2. Убрал константу из объявления функции, но теперь при компиляции проблема с типом переменных для функции getline().
#include <stdio.h> #define MAXLINE 1000 /* максимальный размер вводимой строки */ int getline(char line[], int MAXLINE); void copy(char to[], char from[]);
#include <stdio.h> #define MAXLINE 1000 int getline(char linef[], int counter); void copy(char tot[], char fromf[]); main() { FILE *file; char name[100]; scanf("%s",name); file = fopen(name,"r"); int len; int max; char line[MAXLINE]; char longest[MAXLINE]; max = 0; while ((len = getline(line, MAXLINE)) > 0) if (len > max) { max = len; copy(longest, line); } if (max > 0) printf("%s", longest); 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 i; i = 0; while ((to[i] = from[i]) != '\0') ++i; }
Решение задачи: «Нужны объяснения примеров из книги "Язык программирования Си" Брайан Керниган, Деннис Ритчи»
textual
Листинг программы
#include <stdio.h> #define MAXLINE 1000 int getline(char line[], int counter); void copy(char to[], char from[]); main() { FILE *file; char name[100]; scanf("%s",name); file = fopen(name,"r"); int len; int max; char line[MAXLINE]; char longest[MAXLINE]; max = 0; while ((len = getline(line, MAXLINE)) > 0) if (len > max) { max = len; copy(longest, line); } if (max > 0) printf("%s", longest); 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 i; i = 0; while ((to[i] = from[i]) != '\0') ++i; }
Объяснение кода листинга программы
- #include
Включает файл стандартных библиотек, необходимых для работы с функциями ввода-вывода. - #define MAXLINE 1000 Определяет максимальную длину строки, которую можно прочитать в цикле.
- int getline(char line[], int counter); Функция, предназначенная для чтения строки из файла до конца строки или до EOF. Возвращает длину строки.
- void copy(char to[], char from[]); Копирует строку из одного массива в другой.
- main() Главная функция программы. Открывает файл для чтения, инициализирует переменные и входит в цикл чтения строк до тех пор, пока не будет достигнут конец файла.
- scanf(
%s
,name); Считывает строку из консоли и сохраняет ее в переменнойname
. - file = fopen(name,
r
); Открывает файл для чтения с помощью функцииfopen()
. - int len; Длина текущей строки.
- int max; Максимальная длина строки во всем файле.
- char line[MAXLINE]; Массив для хранения текущей строки.
- char longest[MAXLINE]; Массив для хранения самой длинной строки.
- while ((len = getline(line, MAXLINE)) > 0) Входит в цикл, пока не достигнут конец файла.
- if (len > max) { Если текущая строка длиннее самой длинной, то обновляет значение переменной
max
и копирует текущую строку вlongest
. - copy(longest, line); Копирует текущую строку в
longest
. - } Конец условия, проверяющего длину строки.
- if (max > 0) Если в файле были строки, то выводит на экран самую длинную строку.
- printf(
%s
, longest); Выводит на экран содержимое массиваlongest
. - return 0; Завершает работу программы.
- int getline(char s[], int lim) Функция для чтения строки из файла до конца строки или до EOF.
- void copy(char to[], char from[]) Копирует строку из одного массива в другой.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д