c语言读入一组文本行,将最长的文本行打印出来过程中按下回车键即执行无法输入多行文本

c语言读入一组文本行,将最长的文本行打印出来过程中按下回车键即执行无法输入多行文本

相关代码
#include<stdio.h>
#define MAXLINE 1000
#define EOF (-1)
int mygetline(char line[], int maxline);
void copy(char to[], char from[]);
int main()
{
   int len, max;
   char line[MAXLINE];
   char longest[MAXLINE];
   max = 0;
   while ((len = mygetline(line, MAXLINE)) > 0) {
       if (len > max)
       {
           max = len;
           copy(longest, line);
       }
       if(max>0)
       {
           printf_s("\nthe longest is:%s\n length=%d\n", longest, max);
       }
   }
}
int mygetline(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 = i + 1;
   }
   s[i] = '\0';
   return i;
}
void copy(char to[], char from[])
{
   int i = 0;
   while ((to[i] = from[i]) != '\0')
       i = i + 1;
}

运行结果及报错内容

输入一行文本后回车直接显示该文本的长度,无法输入多行文本。

我想要达到的结果

能够比较多行文本的长度

首先既然要比较多行,那究竟是几行呢?3行?10行?还是100行?程序必须明确知道你输入几行结束啊。
代码被我改写了部分,仅供参考。谢谢!

写法1:用户输入行数作为限定

img

img


#include<stdio.h>
#define MAXLINE 1000
#define EOF (-1)

int mygetline(char line[], int maxline);
void copy(char to[], char from[]);

int main()
{
    int len, max;
    int ls = 0;                    // 待输入行数
    char longest[MAXLINE];
    max = -1;

    // 输入文本行数
    printf("要输入几行?\n");
    scanf("%d ", &ls);

    char line[ls][MAXLINE];

    int i, j;
    for (i = 0; i < ls; i++)
    {
        len = mygetline(line[i], MAXLINE);
        if (len > max)
        {
            max = len;
            j = i;
        }
    }

    printf
        ("\n\n最长的一行是第%d行:\n%s\n\n长度:%d(包括不可见的换行符)\n\n",
         j + 1, line[j], max);
}

int mygetline(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 = i + 1;
    }
    s[i] = '\0';
    return i;
}

void copy(char to[], char from[])
{
    int i = 0;
    while ((to[i] = from[i]) != '\0')
        i = i + 1;
}

写法2:用字串end\n作为结束标记

img

 
#include<stdio.h>
#include<string.h>
#define MAXLINE 1000
#define LINES 20000   //最大行数
#define EOF (-1)

 
int mygetline(char line[], int maxline);
void copy(char to[], char from[]);
 
int main()
{
    char end[]="end\n";//单独一行输入end则判定为输入结束。统计不包含本行。
    int len, max;
    int ls = 0;                    // 待输入行数
    char longest[MAXLINE];
    max = -1;
 
 
    char line[MAXLINE];
 
    int i, j;
    for (i = 0; i < LINES ; i++)
    {
        int len = mygetline(line, MAXLINE);
        if(strcmp(line,end)==0)break;
        else if(len > max)
        {
            max = len;
            copy(longest,line);
            j = i;
        }
    }
    if(max>0)
    printf
        ("\n\n最长的一行是第%d行:\n%s\n\n长度:%d(包括不可见的换行符)\n\n",
         j + 1, longest, max);
}
 
int mygetline(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 = i + 1;
    }
    s[i] = '\0';
    return i;
}
 
void copy(char to[], char from[])
{
    int i = 0;
    while ((to[i] = from[i]) != '\0')
        i = i + 1;
}