练习1-16 修改打印最长文本行的程序的主程序main, 使之可以打印任意长度的输入行的长度, 并尽可能多的打印文本。

先粘贴一遍原程序, 在此基础上改改看。

#include <stdio.h>
#define MAXLINE 1000 //允许输入行的最大长度

int getline(char line[], int maxline);
void copy(char to[], char from[]);
//打印最长的输入行
main()
{
int len; //当前行长度
int max; //目前为止发现的最长行的长度
char line[MAXLINE]; //当前的输入行
char longest[MAXLINE]; //用于保存最长的行

max = 0;
while ((len = getline(line, MAXLINE)) > 0)
if(len > max){
max = len;
copy(longest, line);
}
if(max > 0)
printf("%s", longest);
return 0;

}
// getline函数: 讲一行读入到S中,并返回其长度
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;
}

//copy 函数:将from复制到to;这里假定to足够大


void copy(char to[], char from[])
{
int i;

i = 0;
while ((to[i] = from[i]) != '\0')
++i;
}

以下是答案,看完答案,题目的要求能稍微懂了,可是代码的理解还是不够!

#include <stdio.h>
#define MAXLINE 1000 //允许输入行的最大长度

int getline(char line[], int maxline);
void copy(char to[], char from[]);
//打印最长的输入行
main()
{
int len; //当前行长度
int max; //目前为止发现的最长行的长度
char line[MAXLINE]; //当前的输入行
char longest[MAXLINE]; //用于保存最长的行

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("%s", longest);
return 0;

}
// getline函数: 讲一行读入到S中,并返回其长度
int getline(char s[], int lim)
{
int c, i, j;
j = 0;
for(i = 0; (c = getchar()) != EOF && c != '\n'; ++i)
if(i < lim - 2)
{
s[j] = c;
++j;
}
if(c == '\n'){
s[j] = c;
++j;
++i;
}
s[j] = '\0';
return i;
}

//copy 函数:将from复制到to;这里假定to足够大


void copy(char to[], char from[])
{
int i;

i = 0;
while ((to[i] = from[i]) != '\0')
++i;
}

posted @ 2013-10-21 00:21  _Jango  阅读(1026)  评论(0编辑  收藏  举报