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
  • 相关阅读:
    Elasticsearch学习之基本核心概念
    Kudu,支持快速分析的新型Hadoop存储系统
    npm命令
    git相关命令
    Linux下Nodejs安装(完整详细)转
    数据库删除discuz 部分数据操作
    用tcping检查网站开放的端口
    Mybatis各种模糊查询
    抱歉,当前存在网络问题或服务器繁忙错误代码:20003问题解决方法
    win7下python2.7安装 pip,setuptools的正确方法
  • 原文地址:https://www.cnblogs.com/yangshuo/p/3328914.html
Copyright © 2011-2022 走看看