#include <stdio.h>
#define MAXLINE 1000
int gline(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 = gline(line, MAXLINE) ) >0)
if(len > max) {
max = len;
copy(longest, line);
}
if(max > 0)
printf("%s", longest);
return 0;
}
int gline(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;
}
书的1.9章 字符数组中的这段代码没有任何输出,帮忙看看哪里错了
我修改下格式,否则又要被踩了。。。
之所以没有输出的因为唯一的输出语句
printf("%s", longest);
并没有被运行。为什么没有被运行呢?因为如果不输入EOF
这个循环永远不会跳出:我们来看看
gline()
这个函数:因为
lim
是等于MAXLINE
的,for (i=0; i < lim-1 && (c=getchar() )!=EOF && c!='n';++i)中只要循环进行了一次,
i
就>=1
了。如果输入
EOF
或\n
字符,i
不会加1,但输入\n
会在下一行加1:所以除了输入
EOF
外,while( (len = gline(line, MAXLINE) ) >0)
这个循环会一直运行,并且这个循环是不会运行printf("%s", longest);
的,所以没有输出。总结下,只有输入
EOF
后,才会运行printf("%s", longest);
并输出最长的字符串。我查了下,按"ctrl+d"就是EOF
,当你输入了很多行字符串后,按下ctrl+d
来显示最长的字符串。比如我输入:
会输出
12345