未修改之前的程序
/* 读取一组文本行,并把最长的文本行打印出来 */
#include <stdio.h>
#define MAXLINE 10 /* 允许的输入行的最大长度 */
int get_line(char [], int);
void copy(char to[], char from[]);
/* 打印最长的输入行 */
int main() {
int len; /* 当前行长度 */
int max; /* 目前为止发现的最长行的长度 */
char line[MAXLINE]; /* 当前的输入行 */
char longest[MAXLINE]; /* 用于保存最长的行数 */
max = 0;
while ((len = get_line(line, MAXLINE)) > 0) {
if (len > max) {
max = len;
copy(longest, line);
}
}
if (max > 0) { /* 存在这样的行 */
printf("最长行的长度: %d\n最长的行:\n%s", max, longest);
} else {
printf("不存在这样的行");
}
return 0;
}
/* get_line函数:将一行读入到s中并返回其长度 */
int get_line(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;
}
}
修改之后的程序:
/* C程序设计语言 练习1-16: 修改打印最长文本行的程序的主程序main,使之可以打印任意长度的输入行的长度,并尽可能多地打印文本 */
#include <stdio.h>
#define MAXLINE 1000 /* 允许的输入行的最大长度 */
int get_line(char [], int);
void copy(char to[], char from[]);
/* 打印最长的输入行 */
int main() {
int len; /* 当前行长度 */
int max; /* 目前为止发现的最长行的长度 */
char line[MAXLINE]; /* 当前的输入行 */
char longest[MAXLINE]; /* 用于保存最长的行数 */
max = 0;
while ((len = get_line(line, MAXLINE)) > 0) {
if (len > max) {
max = len;
copy(longest, line);
}
}
if (max > 0) { /* 存在这样的行 */
printf("最长行的长度: %d\n最长的行:\n%s", max, longest);
} else {
printf("不存在这样的行");
}
return 0;
}
/* get_line函数:将一行读入到s中并返回其长度 */
int get_line(char s[], int lim) {
int c, i;
int j;
j = 0;
for (i = 0; /*i < lim-1 &&*/ (c=getchar()) != EOF && c != '\n'; ++i) {
if (i < lim - 2) {
s[j++] = c;
}
}
if (c == '\n') {
s[j++] = c;
++i;
}
s[j] = '\0';
return i;
}
void copy(char to[], char from[]) {
int i;
i = 0;
while ((to[i] = from[i]) != '\0') {
++i;
}
}