From e5f2e2aeb9fcd6af863e8dec62ad67f68549a59b Mon Sep 17 00:00:00 2001 From: duphyf Date: Sun, 30 Nov 2025 13:59:36 +0200 Subject: [PATCH 1/2] Refactor remove_trailing_blanks: fix logic and return updated length --- chapter_1/exercise_1_18/trailing_blanks.c | 119 ++++++++++++---------- 1 file changed, 68 insertions(+), 51 deletions(-) diff --git a/chapter_1/exercise_1_18/trailing_blanks.c b/chapter_1/exercise_1_18/trailing_blanks.c index 6203d76..726160a 100644 --- a/chapter_1/exercise_1_18/trailing_blanks.c +++ b/chapter_1/exercise_1_18/trailing_blanks.c @@ -1,51 +1,68 @@ -#include - -#define MAXLINE 1000 - -int get_line(char line[], int max_line_len); -void remove_trailing_blanks(char line[], int length); - -int main(void) -{ - int len; - char line[MAXLINE]; - - while ((len = get_line(line, MAXLINE)) > 0) - { - remove_trailing_blanks(line, len); - printf("%s", line); - } - - return 0; -} - -int get_line(char line[], int max_line_len) -{ - int c, i; - - for (i = 0; i < max_line_len - 1 && (c = getchar()) != EOF && c != '\n'; ++i) - { - line[i] = c; - } - - if (c == '\n') - { - line[i] = c; - ++i; - } - - line[i] = '\0'; - - return i; -} - -void remove_trailing_blanks(char line[], int length) -{ - int i; - - for (i = length - 2; line[i] == ' ' || line[i] == '\t'; --i) - ; - - line[i + 1] = '\n'; - line[i + 2] = '\0'; -} +#include + +#define MAXLINE 1000 + +int get_line(char line[], int max_line_len); +int remove_trailing_blanks(char line[], int length); + +int main(void) +{ + int len; + char line[MAXLINE]; + + while ((len = get_line(line, MAXLINE)) > 0) + { + remove_trailing_blanks(line, len); + printf("%s", line); + } + + return 0; +} + +int get_line(char line[], int max_line_len) +{ + int c, i; + + for (i = 0; i < max_line_len - 1 && (c = getchar()) != EOF && c != '\n'; ++i) + { + line[i] = c; + } + + if (c == '\n') + { + line[i] = c; + ++i; + } + + line[i] = '\0'; + + return i; +} + +#define HAS_NEWLINE 1 +#define NO_NEWLINE 0 + +int remove_trailing_blanks(char line[], int length) +{ + int i, has_newline; + + has_newline = NO_NEWLINE; + + for (i = length - 1; i >= 0 && (line[i] == '\n' || line[i] == ' ' || line[i] == '\t'); --i) + { + if (line[i] == '\n') + { + has_newline = HAS_NEWLINE; + } + } + + if (has_newline == HAS_NEWLINE) + { + line[i + 1] = '\n'; + line[i + 2] = '\0'; + return i + 2; + } + + line[i + 1] = '\0'; + return i + 1; +} From ff98d264f3610f0f71b29db0ba71fb0cef5dafdb Mon Sep 17 00:00:00 2001 From: duphyf Date: Sun, 30 Nov 2025 14:00:08 +0200 Subject: [PATCH 2/2] Add logic to delete entirely blank lines --- chapter_1/exercise_1_18/trailing_blanks.c | 140 +++++++++++----------- 1 file changed, 72 insertions(+), 68 deletions(-) diff --git a/chapter_1/exercise_1_18/trailing_blanks.c b/chapter_1/exercise_1_18/trailing_blanks.c index 726160a..ddace15 100644 --- a/chapter_1/exercise_1_18/trailing_blanks.c +++ b/chapter_1/exercise_1_18/trailing_blanks.c @@ -1,68 +1,72 @@ -#include - -#define MAXLINE 1000 - -int get_line(char line[], int max_line_len); -int remove_trailing_blanks(char line[], int length); - -int main(void) -{ - int len; - char line[MAXLINE]; - - while ((len = get_line(line, MAXLINE)) > 0) - { - remove_trailing_blanks(line, len); - printf("%s", line); - } - - return 0; -} - -int get_line(char line[], int max_line_len) -{ - int c, i; - - for (i = 0; i < max_line_len - 1 && (c = getchar()) != EOF && c != '\n'; ++i) - { - line[i] = c; - } - - if (c == '\n') - { - line[i] = c; - ++i; - } - - line[i] = '\0'; - - return i; -} - -#define HAS_NEWLINE 1 -#define NO_NEWLINE 0 - -int remove_trailing_blanks(char line[], int length) -{ - int i, has_newline; - - has_newline = NO_NEWLINE; - - for (i = length - 1; i >= 0 && (line[i] == '\n' || line[i] == ' ' || line[i] == '\t'); --i) - { - if (line[i] == '\n') - { - has_newline = HAS_NEWLINE; - } - } - - if (has_newline == HAS_NEWLINE) - { - line[i + 1] = '\n'; - line[i + 2] = '\0'; - return i + 2; - } - - line[i + 1] = '\0'; - return i + 1; -} +#include + +#define MAXLINE 1000 + +int get_line(char line[], int max_line_len); +int remove_trailing_blanks(char line[], int length); + +int main(void) +{ + int len; + char line[MAXLINE]; + + while ((len = get_line(line, MAXLINE)) > 0) + { + len = remove_trailing_blanks(line, len); + + if (len > 1 || line[0] != '\n') + { + printf("%s", line); + } + } + + return 0; +} + +int get_line(char line[], int max_line_len) +{ + int c, i; + + for (i = 0; i < max_line_len - 1 && (c = getchar()) != EOF && c != '\n'; ++i) + { + line[i] = c; + } + + if (c == '\n') + { + line[i] = c; + ++i; + } + + line[i] = '\0'; + + return i; +} + +#define HAS_NEWLINE 1 +#define NO_NEWLINE 0 + +int remove_trailing_blanks(char line[], int length) +{ + int i, has_newline; + + has_newline = NO_NEWLINE; + + for (i = length - 1; i >= 0 && (line[i] == '\n' || line[i] == ' ' || line[i] == '\t'); --i) + { + if (line[i] == '\n') + { + has_newline = HAS_NEWLINE; + } + } + + if (has_newline == HAS_NEWLINE) + { + line[i + 1] = '\n'; + line[i + 2] = '\0'; + return i + 2; + } + + line[i + 1] = '\0'; + return i + 1; +}