summaryrefslogtreecommitdiff
path: root/ch01
diff options
context:
space:
mode:
Diffstat (limited to 'ch01')
-rw-r--r--ch01/ex16-longest.c49
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;
+}