Thread: K&R problem page

  1. #1
    Registered User
    Join Date
    Aug 2005
    Posts
    8

    K&R problem page

    I've entered the program that is on page 29 of the K&R book. I use the Dev-cpp IDE on a Windows machine. The code compiles fine but I had to change a line in the code to get to program to work.

    The code is below and i changed the text in bold from 0 to 1... which seems logical to me but why does the example in the book don't work? Has it something to do with the environment? Help appreciated...

    Code:
    #include <stdio.h>
    
    #define MAXLINE 1000
    
    int getline(char line[], int maxline);
    void copy(char to[], char from[]);
    
    int main(void)
    {
      int len; /* current line length */
      int max; /* maximum length seen so far */
      char line[MAXLINE]; /* current input line */
      char longest[MAXLINE]; /* longest line saved here */
      
      max = 0;
      
      while ((len = getline(line, MAXLINE)) > 1) {
            if (len > max) {
                    max = len;
                    copy(longest, line);
            }
      }
    
      if (max > 0) /* there was a line */
      printf("%s", longest);
      
      return 0;
    }
    
    /* getline: read a line into s, return length */
    
    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;
    }
    
    /* copy: copy 'from' into 'to'; assume its big enough */
    
    void copy(char to[], char from[])
    {
         int i;
         
         i = 0;
         while ((to[i] = from[i]) != '\0')
               ++i;
    }

  2. #2
    Nonconformist Narf's Avatar
    Join Date
    Aug 2005
    Posts
    174
    Code:
    if (c = '\n') {
    That's a bug, you need to use the comparison operator == instead of the assignment operator. But it's not related to your problem, which is user error. On Windows you can signal EOF by typing ctrl+z, then the program will work correctly with 0. By the way, it's safer to copy from the book verbatim until you know enough to make changes to it. If youo're confident that you made an exact copy you can more easily tell if it's a problem with the book, or a problem with how you're using the code.
    Just because I don't care doesn't mean I don't understand.

  3. #3
    and the hat of int overfl Salem's Avatar
    Join Date
    Aug 2001
    Location
    The edge of the known universe
    Posts
    39,659
    > if (c = '\n')
    Should be
    if (c == '\n')
    If you dance barefoot on the broken glass of undefined behaviour, you've got to expect the occasional cut.
    If at first you don't succeed, try writing your phone number on the exam paper.

  4. #4
    Registered User
    Join Date
    Aug 2005
    Posts
    8

    Thumbs up

    Ok, thanks guys...
    1/ I retyped the code... (so I get a better feel for it) I'm new to c... and clearly made an error using the assignment operator...
    2/ Didn't know about the EOF signaling

  5. #5
    Registered User
    Join Date
    Aug 2005
    Posts
    10

    Thumbs up

    Remember ctrl-z sends EOF (EndOfFile) in windows, and ctrl-d in Linux. I looked up the code on page 29 of my 1978 edition of K&R, you did quite a few modifications to make this thing work.
    Ask smart questions - if I would be that smart, I wouldn't need to ask questions.

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. searching problem
    By DaMenge in forum C Programming
    Replies: 9
    Last Post: 09-12-2005, 01:04 AM
  2. C Graphics - Page Flipping
    By z0diac in forum C Programming
    Replies: 1
    Last Post: 10-29-2002, 01:21 AM
  3. half ADT (nested struct) problem...
    By CyC|OpS in forum C Programming
    Replies: 1
    Last Post: 10-26-2002, 08:37 AM
  4. binary tree problem - help needed
    By sanju in forum C Programming
    Replies: 4
    Last Post: 10-16-2002, 05:18 AM
  5. Program problem
    By Mick in forum C++ Programming
    Replies: 1
    Last Post: 02-26-2002, 07:41 AM