From 73920fa56d924ffedde56f4dd7f1827989c54a8f Mon Sep 17 00:00:00 2001 From: dwrz Date: Fri, 31 May 2019 22:08:13 +0000 Subject: [PATCH] Refactor c/beer-song/beer_song.c --- c/beer-song/src/beer_song.c | 86 +++++++++++++++++++------------------ 1 file changed, 44 insertions(+), 42 deletions(-) diff --git a/c/beer-song/src/beer_song.c b/c/beer-song/src/beer_song.c index f08996e..936311d 100644 --- a/c/beer-song/src/beer_song.c +++ b/c/beer-song/src/beer_song.c @@ -1,57 +1,59 @@ #include int verse(char* response, int bottles) { - if (bottles < 0) { - return 0; - } + if (response == NULL || bottles < 0) { + return 0; + } - switch (bottles) { - case 0: - return sprintf(response, - "No more bottles of beer on the wall, " - "no more bottles of beer.\n" - "Go to the store and buy some more, " - "99 bottles of beer on the wall.\n"); + switch (bottles) { + case 0: + return sprintf(response, + "No more bottles of beer on the wall, " + "no more bottles of beer.\n" + "Go to the store and buy some more, " + "99 bottles of beer on the wall.\n"); - case 1: - return sprintf(response, - "1 bottle of beer on the wall, " - "1 bottle of beer.\n" - "Take it down and pass it around, " - "no more bottles of beer on the wall.\n"); + case 1: + return sprintf(response, + "1 bottle of beer on the wall, " + "1 bottle of beer.\n" + "Take it down and pass it around, " + "no more bottles of beer on the wall.\n"); - case 2: - return sprintf(response, - "2 bottles of beer on the wall, " - "2 bottles of beer.\n" - "Take one down and pass it around, " - "1 bottle of beer on the wall.\n"); + case 2: + return sprintf(response, + "2 bottles of beer on the wall, " + "2 bottles of beer.\n" + "Take one down and pass it around, " + "1 bottle of beer on the wall.\n"); - default: - return sprintf(response, - "%d bottles of beer on the wall, " - "%d bottles of beer.\n" - "Take one down and pass it around, " - "%d bottles of beer on the wall.\n", - bottles, bottles, bottles - 1); + default: + return sprintf(response, + "%d bottles of beer on the wall, " + "%d bottles of beer.\n" + "Take one down and pass it around, " + "%d bottles of beer on the wall.\n", + bottles, bottles, bottles - 1); - } + } } void sing(char *response, int start, int finish) { - char *origin = response; + if (response == NULL || start < 0 || finish < 0 || start <= finish) { + return; + } - for (int bottles = start; bottles >= finish; bottles--) { - int charsAdded = verse(response, bottles); - response += charsAdded; + char *origin = response; - // Add a newline between verses, - // except for the last verse. - if (bottles != finish) { - sprintf(response, "\n"); - response += 1; - } - } + for (int bottles = start; bottles >= finish; bottles--) { + int charsAdded = verse(origin, bottles); + origin += charsAdded; - response = origin; + // Add a newline between verses, + // except for the last verse. + if (bottles != finish) { + sprintf(origin, "\n"); + origin += 1; + } + } }