Упражнение 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... Почему так