From c7db6977a8b1d58d66f109059cd0a1e5bb8518d2 Mon Sep 17 00:00:00 2001 From: Konstantine Tsafatinos Date: Mon, 13 Nov 2023 14:13:35 -0500 Subject: [PATCH] add last lesson of chapter 1 --- intro/ext_var_and_scope.c | 58 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 intro/ext_var_and_scope.c diff --git a/intro/ext_var_and_scope.c b/intro/ext_var_and_scope.c new file mode 100644 index 0000000..797e713 --- /dev/null +++ b/intro/ext_var_and_scope.c @@ -0,0 +1,58 @@ +#include + +#define MAXLINE 1000 /* maximum input line size */ + +int max; /* maximum length seen so far */ +char line[MAXLINE]; /* current input line */ +char longest[MAXLINE]; /* longest line saved here */ + +int my_getline(void); +void copy(void); + + +/* print longest input line; specialized version -> worse, less general */ +main() +{ + int len; + extern int max; + extern char longest[]; + + max = 0; + while ((len=my_getline()) > 0) + if (len > max) { + max = len; + copy(); + } + if (max > 0) /* there was a line */ + printf("%s", longest); + return 0; +} + + +/* getline: specialized version */ +int my_getline(void) +{ + int c, i; + extern char line[]; + + for (i = 0; i < MAXLINE-1 && (c=getchar()) != EOF && c != '\n'; ++i) + line[i] = c; + if (c == '\n') { + line[i] = c; + ++i; + } + line[i] = '\0'; + return i; +} + + +/* copy: specialized version */ +void copy(void) +{ + int i; + extern char line[], longest[]; + + i = 0; + while ((longest[i] = line[i]) != '\0') + ++i; +}