diff options
author | zlg <zlg@zlg.space> | 2012-08-11 14:55:41 -0400 |
---|---|---|
committer | zlg <zlg@zlg.space> | 2012-08-11 14:55:41 -0400 |
commit | 569a5bd5c48d8969e644947ce3d89a97a0d56e5e (patch) | |
tree | 877a5fe80c7d36e04777ceba6d560949562c152e /1-16_longest-line.c | |
download | knr-569a5bd5c48d8969e644947ce3d89a97a0d56e5e.tar.gz knr-569a5bd5c48d8969e644947ce3d89a97a0d56e5e.tar.bz2 knr-569a5bd5c48d8969e644947ce3d89a97a0d56e5e.tar.xz knr-569a5bd5c48d8969e644947ce3d89a97a0d56e5e.zip |
Initial commit
Diffstat (limited to '')
-rw-r--r-- | 1-16_longest-line.c | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/1-16_longest-line.c b/1-16_longest-line.c new file mode 100644 index 0000000..1f6e556 --- /dev/null +++ b/1-16_longest-line.c @@ -0,0 +1,52 @@ +#include <stdio.h> + +#define MAXLENGTH 100 + +int get_line(char s[], int lim) { + /* Put as much as possible into a temp string, and count its length */ + int c, i; + + for (i = 0; i < lim && (c = getchar()) != EOF && c != '\n'; ++i) { + s[i] = c; + } + if (c == '\n') { + s[i] = c; + ++i; + } + s[i] = '\0'; + return i; +} + +void copy(char from[], char to[]) { + int i = 0; + + while ((to[i] = from[i]) != '\0') { + ++i; + } +} + +int main() { + int len, max; + + char line[MAXLENGTH]; + char longest[MAXLENGTH]; + + max = 0; + while ((len = get_line(line, MAXLENGTH)) > 0) { + if (len > max) { + max = len; + copy(line, longest); + } + } + + printf("\nThe longest line is %3d characters long.\n", max); + printf("----------------------------------------\n"); + if (max > 0) { + printf("%-s", longest); + if (max == MAXLENGTH && longest[max - 1] != '\n') { + printf("\n"); + } + } + + return 0; +} |