一道练习题求解

时间:2023-02-23 15:06:11
大家好,我刚开始自己学c语言一个礼拜,看的是 c程序设计语言,碰到一道题是要在已输入的文本行里找到最长的文本行,并打印,然后输出所有输入的文本行长度,并 竟可能多的打印出文本,最后红色的部分我想把所有输入的文本行用all[]字符数组记录下来,然后打印,但是就是不成功,下面是我的代码,有没有高手帮我看看哪出问题了么,是不是逻辑运算符没有用对.谢谢
#include <stdio.h>

#define MAXLINE 60000

int getline(char line[], int maxline);  /*函数用来一行一行读取文本行*/
void copy(char longest[], char line[]); /*保存目前最长文本行*/
void save(char all[], char line[]);     /*保存所有输入文本行*/

main()
{
      char line[MAXLINE];/*当前输入行字符数组 */
      char longest[MAXLINE]; /*最长行字符数组*/
      char all[MAXLINE];      /*所有当前输入行组成的数组*/
      int leh[MAXLINE];      /*记录当前所有输入行大小的数组*/
      int len, max, i, m;    /*len 为当前输入行大小,max为当前输入的最长行大小*/
      
      max = 0;
      i = 0;
      while ((len = getline(line, MAXLINE)) > 0) {
            leh[i] = len; /*记录当前输入的所有行大小*/
            ++i; 
            if (len > max) {      /*比较得出当前输入最长行*/
               max = len;
               save(all, line);   /*用all数组储存所有已输入行*/
               copy(longest, line);  /*保存当前最长行为longest*/
            }
      }
      
      if (max > 0) {   /*若存在最长行,打印*/
         for (m = 0; m < i; ++m)    /*打印所有行大小*/
              printf("%d\n", leh[m]);
         
         /*打印出save 数组所有字符*/  /*必须找到连续两个空字符才跳出循环*/
         for (m = 0; (all[m] != '\0') || (all[m + 1] != '\0'); ++m) { 
             if (all[m] == '\n')
                printf("\n");       
             else if (all[m] == '\0')
                   ; 
             else
                 printf("%c", all[m]);       
         }
         printf("%s", longest);
      }
      return 0; 
      getchar();
}      
         
      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;
      }
     
      void copy(char to[], char from[]) /*保存最长行函数*/
      {
           int i;
           
           i = 0;
           while ((to[i] = from[i]) != '\0')
                 ++i;
      }
      
      void save(char tal[], char from[]) /*保存所有已输入行函数*/
      {
           int i, k;
           
           i = 0;
           k = 0;
           while ((tal[i] != '\0') || (tal[i + 1] != '\0')) /*搜索tal中开始记录的地方*/
                 ++i;
           while ((tal[i + 1] = from[k]) != '\0') { /*记录 from[] 到 tal[]*/
                 ++i;
                 ++k;
           }
      }



5 个解决方案

#1


怎么缩进全都没有了..

#2


形参都乱套吧,看不懂

#3


友情帮顶。代码放在
中间发。 

#4


自己好好想想再做打算,这道题应该不会很难哦,对你。

#5


有点复杂,好像是顺序不对啊

#1


怎么缩进全都没有了..

#2


形参都乱套吧,看不懂

#3


友情帮顶。代码放在
中间发。 

#4


自己好好想想再做打算,这道题应该不会很难哦,对你。

#5


有点复杂,好像是顺序不对啊