3

包含输出传统圣诞歌曲“圣诞节十二天”歌词功能的 AC 程序。不要手动打印整个歌词。

所以我做了一个代码并且有错误,但我最终修复了它。我的十二天圣诞歌曲在循环中打印得很好。

但我还有另一个问题。我的代码是否可以作为函数分离或剖析?

指令说:“你的函数只会在 main() 函数中被调用,不会返回任何东西。” 所以我想我会使用 void?以什么方式?

#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; }

尝试执行此操作并在打印时正常工作。您对改进我的代码有什么建议吗?功能有问题。

4

4 回答 4

3

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
}
于 2013-08-27T08:39:51.913 回答
2

Use a void function.

void print12DaysOfChristmas(void)
{
    // Paste all your code here
}

int main(void) // Main Function
{
    print12DaysOfChristmas();
    return 0;
}

Notes:

  1. About the function signatures in C, see this answer.
  2. If the function were not defined before main, you would need to use a forward declaration.
于 2013-08-27T08:39:45.447 回答
0

这意味着您应该创建一个void函数来完成这项工作:

#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;
}

用一个活生生的例子

于 2013-08-27T08:44:15.283 回答
0

在您的程序中,您需要抑制所有幻数(参见:http ://en.wikipedia.org/wiki/Magic_number_%28programming%29 )

另外,我对您的代码进行了一些优化,如下所示:

    #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();
    }
于 2013-08-27T09:10:35.890 回答