12天的圣诞节C计划

Jus*_*ent 2 c c++

所以我自己尝试了12天的圣诞节编码.我还没有完成歌词,我还在努力弄明白.但我不明白为什么我的圣诞节"第一天"加倍并与另一份礼物合作,并且在第12天,没有礼物出现.我检查了我的开关盒,他们似乎是对的.是否有可能减少我的代码打印出完整的歌词?

#include <stdio.h>
#include <conio.h>

int main() // Main Function
{
    int days, counter, num;
    //int counter = 1;  

    printf("\t\t***TWELVE DAYS OF CHRISTMAS***\n");
    printf("\t\t______________________________\n\n\n");

    for (counter=0; counter<=12; counter++)
    {   
        // counter++;
        switch(counter)
        {
            case 1: printf("\t\tA Partridge in a Pear Tree\n");break; // Day 12
            case 2: printf("\t\tTwo Turtle Doves\n"); break;
            case 3: printf("\t\tThree French Hens\n"); break;
            case 4: printf("\t\tFour Calling Birds \n"); break;
            case 5: printf("\t\tFive Golden Rings\n"); break;
            case 6: printf("\t\tSix Geese a Laying\n"); break;
            case 7: printf("\t\tSeven Swans a Swimming\n"); break;
            case 8: printf("\t\tEight Maids a Milking\n"); break;
            case 9: printf("\t\tNine Ladies Dancing\n"); break;
            case 10: printf("\t\tTen Lords a Leaping\n"); break;
            case 11: printf("\t\tEleven Pipers Piping\n"); break;
            case 12: printf("\t\tTwelve Drummers Drumming\n"); break; // Day 1 
        }
        printf("\n\tOn the ");

        switch(counter){
            case 1:
                printf("1st");
                break;  
            case 2: 
                printf("2nd");
                break;
            case 3: 
                printf("3rd");
                break;
            case 4: 
                printf("4th");
                break;
            case 5: 
                printf("5th");
                break;      
            case 6: 
                printf("6th");
                break;
            case 7: 
                printf("7th");
                break;
            case 8: 
                printf("8th");
                break;  
            case 9: 
                printf("9th");
                break;
            case 10:    
                printf("10th");
                break;  
            case 11:    
                printf("11th");
                break;  
            case 12:    
                printf("12th");
                break;                                                                                      
                default: 
                printf("1st", num);
                break;
            }
            printf(" day of Christmas my true love sent to me\n");

        }   

        getch();
        return 0;
    }
Run Code Online (Sandbox Code Playgroud)

并且指令说:"你的函数只会在main()函数中被调用而不会返回任何东西"那么它是否意味着我不会创建更多的函数?或者我应该只将所有代码放在main函数中?或者创建单独的代码?

Edw*_*uck 6

再次查看switch语句,并记住中断不是完全必要的.

switch (day) {
  case 2: printf("two turtle doves ");
  case 1: printf("and a partridge in a pear tree");
}
Run Code Online (Sandbox Code Playgroud)

这将是"第二天"从"两只乌龟鸽子"开始,然后落到 "和梨树上的鹧"中.

与此同时,"第1天"开始是"和梨树中的鹧".


Vel*_*tas 6

我实际上并不认为开关是这里的最佳选择.我们有一个要显示的项目列表,我们可以轻松地将其放入数组和订单中,并且每次都必须显示这些项目的不同列表.虽然切换语法在这里很好(正如问题的评论中所提到的,而不是在提问者的代码本身中使用),但我认为简单的循环比不断要求程序执行切换跳转更合适.

这是我建议的解决方案:

#include <stdio.h>

const char
  *presents[] = {
    "\t\tA Partridge in a Pear Tree\n", "\t\tTwo Turtle Doves\n",
    "\t\tThree French Hens\n", "\t\tFour Calling Birds \n",
    "\t\tFive Golden Rings\n", "\t\tSix Geese a Laying\n",
    "\t\tSeven Swans a Swimming\n", "\t\tEight Maids a Milking\n",
    "\t\tNine Ladies Dancing\n", "\t\tTen Lords a Leaping\n",
    "\t\tEleven Pipers Piping\n", "\t\tTwelve Drummers Drumming\n"},
  *days[] = {
    "1st", "2nd", "3rd", "4th", "5th", "6th",
    "7th", "8th", "9th", "10th", "11th", "12th"};

void printTwelveDaysSong(void)
{
  int i, j;

  for (i = 0; i < 12; ++i) {
    printf("\n\tOn the %s day of Christmas my true love sent to me\n", days[i]);
    for (j = i; j > 0; --j) fputs(presents[j], stdout);
    if (i > 0) fputs("\t\tand\n", stdout);
    fputs(presents[0], stdout);
  }
}

/* Example main function */
int main(void)
{
  printTwelveDaysSong();
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我将核心代码放在一个不同的功能中,因为它听起来就像是需要的,所以我也表明了这一点,没有什么特别之处.

在代码中我只使用C标准库函数进行输出,并且我没有尝试实现交互式程序,如果您愿意,可以自己添加.