Reputation: 99
A C program that contains a function that outputs the lyrics of the traditional Christmas song “Twelve Days of Christmas.” Do not print the entire lyrics manually.
So I made a code and there were errors but I finally fixed it. My Twelve Days of Christmas Song prints well with the looping.
But I have another problem. Is my code possible to be separated or dissected as functions?
The instruction says, "Your function will just be invoked in the main() function and will not return anything." So I guess I'll be using void? In what way?
#include <stdio.h>
#include <conio.h>
int main() // Main Function
{
int days, counter, num;
printf("\n\t\t* * * TWELVE DAYS OF CHRISTMAS * * *\n");
printf("\t\t_____________________________________\n\n\n");
for (counter=1; counter<=12; counter++) {
printf("\tOn the ");
switch(counter){
case 1:
printf("1st");
break;
case 2:
printf("2nd");
break;
case 3:
printf("3rd");
break;
default:
printf("%dth", counter);
break;
}
printf(" day of Christmas my true love sent to me\n\n");
switch(counter) {
case 12: printf("\t\tTwelve Drummers Drumming\n\n");
case 11: printf("\t\tEleven Pipers Piping\n\n");
case 10: printf("\t\tTen Lords a Leaping\n\n");
case 9: printf("\t\tNine Ladies Dancing\n\n");
case 8: printf("\t\tEight Maids a Milking\n\n");
case 7: printf("\t\tSeven Swans a Swimming\n\n");
case 6: printf("\t\tSix Geese a Laying\n\n");
case 5: printf("\t\tFive Golden Rings\n\n");
case 4: printf("\t\tFour Calling Birds \n\n");
case 3: printf("\t\tThree French Hens\n\n");
case 2: printf("\t\tTwo Turtle Doves\n\n");
case 1: printf("\t\t");if (counter > 1 ) printf("And ");printf("A Partridge in a Pear Tree\n\n");
// case 1: printf("\t\tA Partridge in a Pear Tree\n\n");
}
}
getchar(); return 0; }
Tried executing this and works fine with the printing. Do you have any suggestions to imporove my code? Having trouble with functions.
Upvotes: 3
Views: 4367
Reputation: 1167
On your program you need to suppress all magic number (cf: http://en.wikipedia.org/wiki/Magic_number_%28programming%29)
Also, i optimize a bit your code as following:
#include <stdio.h>
#include <string.h>
#define FIRST_DAY "1st"
#define SECOND_DAY "2nd"
#define THIRD_DAY "3rd"
#define N_DAY "th"
#define ONLY_ONE_SENTENCE 0
#define LAST_DAY 1
#define NUMBER_OF_DAYS 12
#define BUFFER_SIZE 5
#define FIRST_ANNOUNCE "\tOn the %s day of Christmas my true love sent to me\n\n"
const char *sentences[] = {
"\t\tA Partridge in a Pear Tree\n\n",
"\t\tAnd A Partridge in a Pear Tree\n\n",
"\t\tTwo Turtle Doves\n\n",
"\t\tThree French Hens\n\n",
"\t\tFour Calling Birds \n\n",
"\t\tFive Golden Rings\n\n",
"\t\tSix Geese a Laying\n\n",
"\t\tSeven Swans a Swimming\n\n",
"\t\tEight Maids a Milking\n\n",
"\t\tNine Ladies Dancing\n\n",
"\t\tTen Lords a Leaping\n\n",
"\t\tEleven Pipers Piping\n\n",
"\t\tTwelve Drummers Drumming\n\n"};
void print12DaysOfChristmas();
int main() { // Main Function
print12DaysOfChristmas();
return 0;
}
void print12DaysOfChristmas() {
int days, counter, num, index;
char buffer[BUFFER_SIZE];
char *day;
printf("\n\t\t* * * TWELVE DAYS OF CHRISTMAS * * *\n");
printf("\t\t_____________________________________\n\n\n");
for (counter=1; counter <= NUMBER_OF_DAYS; counter++) {
switch (counter) {
case 1:
day=FIRST_DAY;
break;
case 2:
day=SECOND_DAY;
break;
case 3:
day=THIRD_DAY;
break;
default:
snprintf(buffer, BUFFER_SIZE,"%d",counter);
day=strcat(buffer, N_DAY);
break;
}
printf(FIRST_ANNOUNCE, day);
for (index=counter; index > 0; index--) {
// If there is only one sentence
if (counter == LAST_DAY) {
printf(sentences[ONLY_ONE_SENTENCE]);
} else {
printf(sentences[index]);
}
}
}
getchar();
}
Upvotes: 0
Reputation: 227488
It just means all the work should be done in a void function, which is then called in main:
void doTheWork(void); // function declaration
int main(void)
{
doTheWork();
return 0;
}
#include <stdio.h>
// function definition
void doTheWork(void)
{
// put the implementation here
}
Upvotes: 3
Reputation: 14510
It means that you should create a void
function to do the job :
#include <stdio.h>
// Function Implementation
void yourFunction(void)
{
int days, counter, num;
printf("\n\t\t* * * TWELVE DAYS OF CHRISTMAS * * *\n");
printf("\t\t_____________________________________\n\n\n");
for (counter=1; counter<=12; counter++) {
printf("\tOn the ");
switch(counter){
case 1:
printf("1st");
break;
case 2:
printf("2nd");
break;
case 3:
printf("3rd");
break;
default:
printf("%dth", counter);
break;
}
printf(" day of Christmas my true love sent to me\n\n");
switch(counter) {
case 12: printf("\t\tTwelve Drummers Drumming\n\n");
case 11: printf("\t\tEleven Pipers Piping\n\n");
case 10: printf("\t\tTen Lords a Leaping\n\n");
case 9: printf("\t\tNine Ladies Dancing\n\n");
case 8: printf("\t\tEight Maids a Milking\n\n");
case 7: printf("\t\tSeven Swans a Swimming\n\n");
case 6: printf("\t\tSix Geese a Laying\n\n");
case 5: printf("\t\tFive Golden Rings\n\n");
case 4: printf("\t\tFour Calling Birds \n\n");
case 3: printf("\t\tThree French Hens\n\n");
case 2: printf("\t\tTwo Turtle Doves\n\n");
case 1: printf("\t\t");if (counter > 1 ) printf("And ");printf("A Partridge in a Pear Tree\n\n");
// case 1: printf("\t\tA Partridge in a Pear Tree\n\n");
}
}
}
int main(void)
{
yourFunction(); // Call your function
getchar();
return 0;
}
With a live example.
Upvotes: 0
Reputation: 22634
Use a void
function.
void print12DaysOfChristmas(void)
{
// Paste all your code here
}
int main(void) // Main Function
{
print12DaysOfChristmas();
return 0;
}
Notes:
Upvotes: 2