zoukankan      html  css  js  c++  java
  • 练习1-16:修改打印最长文本行的程序的主程序main,使之可以打印任意长度的输入行的长度,并尽可能多地打印文本(C程序设计语言 第2版)

    该书英文配套答案
    Answer to Exercise 1-16, page 30
    Revise the main routine of the longest-line program so it will correctly print the length of arbitrarily long input lines, and as much as possible of the text.
    
     
    /* This is the first program exercise where the spec isn't entirely
     * clear. The spec says, 'Revise the main routine', but the true
     * length of an input line can only be determined by modifying
     * getline. So that's what we'll do. getline will now return the
     * actual length of the line rather than the number of characters
     * read into the array passed to it.
     */
     
    #include <stdio.h>
     
    #define MAXLINE 1000 /* maximum input line size */
     
    int getline(char line[], int maxline);
    void copy(char to[], char from[]);
     
    /* print longest input line */
    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)) > 0)
      {
        printf("%d: %s", len, line);
     
        if(len > max)
        {
          max = len;
          copy(longest, line);
        }
      }
      if(max > 0)
      {
        printf("Longest is %d characters:
    %s", max, longest);
      }
      printf("
    ");
      return 0;
    }
     
    /* getline: read a line into s, return length */
    int getline(char s[], int lim)
    {
      int c, i, j;
     
      for(i = 0, j = 0; (c = getchar())!=EOF && c != '
    '; ++i)
      {
        if(i < lim - 1)
        {
          s[j++] = c;
        }
      }//这里getline修改后,i可以大于lim限制,只计数,不保存字符。
      if(c == '
    ')
      {
        if(i <= lim - 1)
        {
          s[j++] = c;
        }
        ++i;
      }
      s[j] = '';
      return i;
    }
     
    /* copy: copy 'from' into 'to'; assume 'to' is big enough */
    void copy(char to[], char from[])
    {
      int i;
     
      i = 0;
      while((to[i] = from[i]) != '')
      {
        ++i;
      }
    }
    View Code
  • 相关阅读:
    五大主流浏览器 CSS3 和 HTML5 兼容性大比拼
    httpservice 公共类
    Eclipse自动生成注释
    天生一对"Maven2+Jetty" Maven2创建并管理WebApp,并使用Maven Jetty Plugin在Eclipse中调试
    jsp checkbox不错的应用
    我们需要改变
    Sortable Table 可排序表格JS收集
    Eclipse快捷键大全()
    Ajax简单应用
    css 固定table表头
  • 原文地址:https://www.cnblogs.com/yangshuo/p/3328914.html
Copyright © 2011-2022 走看看