Задать вопрос
@IndusDev

Зачем в данном случае прописывать len-1?

Упражнение 1.17. Напишите программу для вывода всех строк входного потока, имеющих длину более 80 символов.

/* программа вывода всех строк входного потока, имеющих длину более 80 символов */

#include "stdafx.h"
#define MAXLINE 1000 /* максимальная длина строки в потоке */

int getline(char line[], int maxline);

int main()
{
int len; /* длина текущей строки */
char line[MAXLINE]; /* текущая введенная строка */

while ((len = getline(line, MAXLINE)) > 0)
/* если количество символов в строке больше 80, выводим эту строку */
===============================================================
if (len - 1 > 80) /* "len - 1" не считаем нулевой символ '\0' */
===============================================================
printf("This string is longer than 80 characters: %s", line);
return 0;
}

/* getline: считывает строку в s, возвращает ее длину */
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;
}

Почему (len-1) > 80, а не просто len > 80. Ведь, например, если мы введем 123456\n, функция getlen вернет len = 7. Если мы введем len-1, получим 6 символов (Но это не учитывая \n).
Но вот если мы введем просто 123456, функция вернет len = 6. Но len-1 = 5, а символов-то 6... Почему так
  • Вопрос задан
  • 648 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
p00h
@p00h
Фехтовальщик-стропальщик
Символ '\0' означает конец строки, он «служебный» в данном случае.
Ответ написан
15432
@15432
Системный программист ^_^
Не нужно там len-1, getline не учитывает терминирующий ноль.
On success, getline() and getdelim() return the number of characters
read, including the delimiter character, but not including the
terminating null byte ('\0').
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы