- 论坛徽章:
- 0
|
C程序设计语言练习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;
}
int getline(char s[], int lim)
{
int c, i;
for (i = 0; i < lim - 1 && (c = getchar()) != EOF && c != '\n'; ++i)
s = c;
if (c == '\n') {
s = c;
++i;
}
s = '\0';
return i;
}
void copy(char to[], char from[])
{
int i;
i = 0;
while ((to = from) != '\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;
}
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;
}
void copy (char to[], char from[])
{
int i;
i = 0;
while ((to = from) != '\0')
++i;
}
我们只对原来的主函数进行了一处修改,如下所示:
printf("%d, %s", len, line);
这条语句将把输入行的长度(len)和保存在数组line里的字符尽可能多的打印出来。
问题:这条语句只负责打印len和数组line里的字符,为什么说尽可能多的打印出来?怎样尽可能多的打印?
我们对函数getline也作了几处修改。首先,循环语句
for (i = 0; (c = getchar()) != EOF && c != '\n'; ++i)
不再检查字符数是否超出数组s的限制-因为这一限制不再是for循环的终止条件之一了,现在的getline能返回任意长度的输入行的长度,并能存储尽可能多的输入行内容。
问题:怎样实现的尽可能多的存储输入行内容,存储输入行内容的是数组s,最多存储1000个字符,和原程序是一样的并没有增加阿 |
|