Question

In the code below (for problem 1-17 in "The C Programming Language", by Kernighan and Ritchie) why doesn't it print the longest line (at the bottom)?

#include <stdio.h>
#define MAXLINE 1000
#define LONGLINE 10

int getLineLength(char line[], int maxline){
  int i, c;

  for(i = 0; i< maxline-1 && (c = getchar() != EOF) && c != '\n'; i++)
    line[i] = c;

  if(c == '\n') {
      line[i] = c;
      i++;
  }

  line[i] = '\0';
  return i;
}



main() {
  int len;
  char line[MAXLINE];
  while((len = getLineLength(line, MAXLINE)) > 0)
    if(len > LONGLINE)
      printf("The line was over the maxlength\n\t %s", line);

  return 0;
}
Was it helpful?

Solution

In your code:

(c = getchar() != EOF)

This will be evaluated as (c = (getchar() != EOF)), giving the wrong result. What you need is:

((c = getchar()) != EOF)

OTHER TIPS

This program reads from standard input, and prints that long message for lines longer 10 than characters. Lines end with '\n' (newline, ENTER). Input ends with EOF, if you feed a file, e.g. through a pipe, or CTRL-C, if you enter characters manually.

I'm surprised this works at all. (c = getchar() != EOF) is completely wrong for a start. line[i] = c; appears twice. And I think it's vulnerable to a buffer overflow in an edge case.

EDIT: An earlier answer that I can't see any more said that you seem to have your braces missing from the for loop.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top