Какая-то загадка для меня происходит при выполнении упражнения 1-17 из K&R. Вот что нужно сделать:
Exercise 1-17. Write a program to print all input lines that are longer than 80 characters.
Функцию getline() я взял как есть из книги, немного подправил лишь main() вот так:
#include <stdio.h>
#include "inc/getline.h"
#define MAXLINE 1000 /* maximum input line size */
#define MINLENGTH 80
/* Exercise 1-17. Write a program to print all input lines that are
* longer than 80 characters.
*/
int main()
{
int len; /* current line length */
char line[MAXLINE]; /* current input line */
while ((len = _getline(line, MAXLINE)) > 0) {
printf("DBG >>>\n");
printf("MINLENGTH = %d\n", MINLENGTH);
printf("len = %d\n", len);
printf("DBG <<<\n\n");
if (len > MINLENGTH) {
printf(line);
}
}
return 0;
}
Собираю и запускаю всё это дело таким образом:
x86_64-pc-linux-gnu-gcc -g3 -Wall -Wpedantic -std=c99 ex_1-17.c inc/getline.c -o ex_1-17 && ./ex_1-17 < ex_1-17_test.txt
DBG >>>
MINLENGTH = 80
len = 80
DBG <<<
DBG >>>
MINLENGTH = 80
len = 81
DBG <<<
this is the line which is 80 characters wide: ----------------------------------
DBG >>>
MINLENGTH = 80
len = 82
DBG <<<
this is the line which is 81 characters wide: -----------------------------------
DBG >>>
MINLENGTH = 80
len = 91
DBG <<<
this is the line which is 90 characters wide: --------------------------------------------
Файл ex_1-17_test.txt содержит такие строки:
this is the line which is 79 characters wide: ---------------------------------
this is the line which is 80 characters wide: ----------------------------------
this is the line which is 81 characters wide: -----------------------------------
this is the line which is 90 characters wide: --------------------------------------------
Я не могу понять, почему выводится строка длиной в 80 чаров, если по условию len > MINLENGTH? А также дебажная инфа изначально печатается без строки в 80 чаров, почему потом эта строка печатается?
DBG >>>
MINLENGTH = 80
len = 80
DBG <<<
DBG >>>
MINLENGTH = 80
len = 81
DBG <<<
this is the line which is 80 characters wide: ----------------------------------
DBG >>>
MINLENGTH = 80
len = 82
DBG <<<