diff options
| author | Zhineng Li <[email protected]> | 2026-02-04 10:30:35 +0800 |
|---|---|---|
| committer | Zhineng Li <[email protected]> | 2026-02-04 10:30:47 +0800 |
| commit | 300a343be85905883df27550145e4a687b91f691 (patch) | |
| tree | d88f01fe50508c37f84602da20973536c6171628 /ch01/ex16-longest.c | |
| parent | 67640165f1a301225338754c12c71ba213d44255 (diff) | |
| download | c-knr-exercises-300a343be85905883df27550145e4a687b91f691.tar.gz c-knr-exercises-300a343be85905883df27550145e4a687b91f691.zip | |
ex01-16: print the length of the longest line
Diffstat (limited to 'ch01/ex16-longest.c')
| -rw-r--r-- | ch01/ex16-longest.c | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/ch01/ex16-longest.c b/ch01/ex16-longest.c new file mode 100644 index 0000000..d337054 --- /dev/null +++ b/ch01/ex16-longest.c @@ -0,0 +1,49 @@ +#include <stdio.h> +#define MAXLINE 1000 /* maximum input line size */ + +int getln(char line[], int maxline); +void copy(char to[], char from[]); + +/* print longest input line */ +int main() +{ + int len; /* current line length */ + int max; /* maximum length seen so far */ + char line[MAXLINE]; /* current input line */ + char longest[MAXLINE]; /* longest line saved here */ + + max = 0; + while ((len = getln(line, MAXLINE)) > 0) + if (len > max) { + max = len; + copy(longest, line); + } + if (max > 0) /* there was a line */ + printf("%d %s", max, longest); + return 0; +} + +/* getln: read a line into s, return length */ +int getln(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: copy `from` into `to`; assume to is big enough */ +void copy(char to[], char from[]) +{ + int i; + + i = 0; + while ((to[i] = from[i]) != '\0') + ++i; +} |
