aboutsummaryrefslogtreecommitdiff
path: root/ch1/1-16_longest-line.c
diff options
context:
space:
mode:
authorzlg <zlg@zlg.space>2013-02-13 20:48:44 -0600
committerzlg <zlg@zlg.space>2013-02-13 20:48:44 -0600
commit5018e06c580dd21c958ec1672c26a3448faf0c55 (patch)
treecebbb56dad0a6b821cad3712c7977f6f9b0086ab /ch1/1-16_longest-line.c
parentFix 1-09's solution (diff)
downloadknr-5018e06c580dd21c958ec1672c26a3448faf0c55.tar.gz
knr-5018e06c580dd21c958ec1672c26a3448faf0c55.tar.bz2
knr-5018e06c580dd21c958ec1672c26a3448faf0c55.tar.xz
knr-5018e06c580dd21c958ec1672c26a3448faf0c55.zip
Add license file, reorganize project
Diffstat (limited to 'ch1/1-16_longest-line.c')
-rw-r--r--ch1/1-16_longest-line.c52
1 files changed, 52 insertions, 0 deletions
diff --git a/ch1/1-16_longest-line.c b/ch1/1-16_longest-line.c
new file mode 100644
index 0000000..1f6e556
--- /dev/null
+++ b/ch1/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;
+}