Можете объяснить данный фрагмент кода? Долго размышлял над задачей 1.22 из книги K&R.
В итоге решил посмотреть решение из книги решений их задач (Тондо и Гимпел).
Задача такая: Напишите программу, печатающую символы входного потока так, чтобы строки текста не выходили правее n-й позиции. Это значит, что каждая строка, длина которой превышает n, должна печататься с переносом на следующие строки. Место переноса следует “искать” после последнего символа, отличного от символа-разделителя, расположенного левее n-й позиции. Позаботьтесь о том, чтобы ваша программа вела себя разумно в случае очень длинных строк, а также когда до n-й позиции не встречается ни одного символа пробела или табуляции.
Увидел там такое решение:#include
#define TABINC 8
#define MAXCOL 10
char line[MAXCOL];
void println(int pos);
int findspace(int pos);
int newpos(int pos);
int exptab(int pos);
int main() {
int c, pos;
pos = 0;
while ((c = getchar()) != EOF) {
line[pos] = c;
if (c == '\t') {
pos = exptab(pos);
}
else if (c == '\n') {
println(pos);
pos = 0;
}
else if (++pos >= MAXCOL) {
pos = findspace(pos);
println(pos);
pos = newpos(pos);
}
}
system("pause");
return 0;
}
int findspace(int pos) {
while (pos > 0 && line[pos] != ' ') {
--pos;
}
if (pos == 0)
return MAXCOL;
else
return pos + 1;
}
void println(int pos) {
int i;
for (i = 0; i 0)
putchar('\n');
}
int newpos(int pos) {
int i, j;
if (pos = MAXCOL) {
return 0;
}
else {
i = 0;
for (j = pos; j = MAXCOL) {
return 0;
}
else {
i = 0;
for (j = pos; j = MAXCOL) {
return 0;
Во-первых, как pos может быть = MAXCOL, мы возвращаем pos = 0;
Либо я не вижу сейчас элементарного, то ли что...

21 Авг 2019 в 06:24
256 +1
0
Ответы
1

Данный фрагмент кода предполагает обработку случаев, когда значение переменной pos выходит за пределы допустимого диапазона.

В первом условии if (pos <= 0 || pos >= MAXCOL), проверяется, что значение pos не меньше нуля и не больше или равно MAXCOL (значение константы MAXCOL равно 10 в данном случае).

Если pos <= 0, это может возникнуть при первом вызове функции newpos, когда pos было равно 0 (так как индексы начинаются с 0), и новая позиция также должна быть равна 0 (возвращается 0).

Если pos >= MAXCOL, это означает, что после переноса символов строки, новая позиция i для записи символов обновленной строки будет превышать значение MAXCOL, что не допустимо. Поэтому в данном случае также возвращается 0, чтобы начать запись символов с начала строки.

Таким образом, в обоих случаях возвращается 0, что означает начало строки для записи новых символов после переноса.

20 Апр в 13:19
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 548 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир