1. 要求: 程序读入一组文本行, 并把最长的文本行打印出来.

2. 分析.

  1. 要做什么, 读取一行, 与最长行比较, 保存最长行, 读取完, 比较完了, 打印最长行.

  2. 读取一行, 碰到换行符或EOF结束符是一行, 能读取的最大长度也是一行, 记录行的长度.

  3. 循环内当前行长度与最大行长度比较, 当前行比最大行长, 最大行=当前行, 否则不变.

  4. 循环结束后, 结束行与最大行比较, 结束行长度>最大行, 最大行=结束行.

  5. 打印最大行.

思维导图

3. 代码.

1. 为了结束循环, 结束行的长度返回负数. 负数比较时需要转为正数.

2. int数组中’\0’表示结束, 这个特殊需要记下.


#include<stdio.h>
#include<stdlib.h>
#define MAXLINE 1000

int getLine(char line[], int maxline);
void copy(char to[], char from[], int maxline);
int main(){
    int index;
    int len;
    int max;
    max = 0;
    char line[MAXLINE];
    char maxlong[MAXLINE];
    while((len=getLine(line, MAXLINE)) > 0){
        if(len > max){
            max = len;
            copy(maxlong, line, MAXLINE);
        }
    }
    if(len<0){
        if(abs(len) > max){
            copy(maxlong, line, MAXLINE);
        }
    }
    for(index=0;maxlong[index] != '\0' && index < MAXLINE; index++){
        printf("%c", maxlong[index]);
        if(index == MAXLINE - 1){
            printf("test");
        }
    }


    return 0;
}


int getLine(char line[], int maxline){
    int input, i;
    i = 0;
    while((input=getchar()) != EOF &&  input != '\n' && i<maxline){
        line[i] = input;
        ++i;
    }
    if(i <= maxline -1){
        line[i] = '\0';
    }

    if(input == EOF){
        return -i;
    }else{
        return i;
    }
}

void copy(char to[], char from[], int max){
    int i;
    for(i=0; i<max ;i++){
        to[i] = from[i];
    }
}