所以我自己尝试了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函数中?或者创建单独的代码?
再次查看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天"开始是"和梨树中的鹧".
我实际上并不认为开关是这里的最佳选择.我们有一个要显示的项目列表,我们可以轻松地将其放入数组和订单中,并且每次都必须显示这些项目的不同列表.虽然切换语法在这里很好(正如问题的评论中所提到的,而不是在提问者的代码本身中使用),但我认为简单的循环比不断要求程序执行切换跳转更合适.
这是我建议的解决方案:
#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标准库函数进行输出,并且我没有尝试实现交互式程序,如果您愿意,可以自己添加.