From 8557e29d33b365816114996d04531468e13e78b1 Mon Sep 17 00:00:00 2001 From: zlg Date: Wed, 27 Feb 2013 05:54:58 -0600 Subject: Solve Exercise 2-02: No logical operators The text doesn't specify which technique to use. The section outlined operator precedence, but I couldn't think of a way to check for truth in the three main expressions without logical operators. So I turned to a recursive function. It works, but I'm not sure if it's what K&R were after. --- ch2/2-02_no-logical-operators.c | 44 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 ch2/2-02_no-logical-operators.c (limited to 'ch2') diff --git a/ch2/2-02_no-logical-operators.c b/ch2/2-02_no-logical-operators.c new file mode 100644 index 0000000..6fea5d6 --- /dev/null +++ b/ch2/2-02_no-logical-operators.c @@ -0,0 +1,44 @@ +#include + +/* The C Programming Language, 2nd Edition + * + * Exercise 2-2: Write a loop equivalent to the 'for' loop above without + * using && or ||. + * + * (The for loop is: + * + * for (i=0; i < lim - 1 && (c = getchar()) != '\n' && c != EOF) + * i++; + * + * Answer: A recursive function should do the job. I think... + * + */ + +#define LIMIT 17 + +char test[LIMIT] = ""; +int i = 0; +int c; + +void save_string(char s[]) { + if (i < LIMIT - 1) { + c = getchar(); + if (c != '\n') { + if (c != EOF) { + s[i] = c; + i++; + } else { + return; + } + } else { + return; + } + save_string(s); + } +} + +int main() { + save_string(test); + printf("%s\n", test); + return 0; +} -- cgit v1.2.3-54-g00ecf