第一天
小明想要给他的朋友写一个生日祝福程序,在运行时,会根据输入的日期输出不同的结果。
若在平时运行程序(例如9月28日):
09-28 :
+3?-15
而在朋友生日(12月13日)当天:
12-13 :
% % % % % % % % %
% 4bd %
% ^ ^ %
% +------+ %
% +------+ %
% +--------+ %
% % % % % % % % % Happy birthday!
输入
程序通过命令行参数输入获取参数,参数格式为月份 日期
。
为了方便输入,将数字统一移动64个,即 ASSCII 码表为 65 的符号(即A
)代表数字1。
输出
在输出中,第一行为月份-日期
,其中若月份或日期不为两位数,则在左侧用0补齐两位。
非生日日期时,在第一行后输出 生日月份 与 当前月份 数字之差,和 生日日期 与 当前日期 数字之差,并强制显示正负号,两个数字间以问好为分隔。
生日日期时,在第一行后输出如上图所示的字符画,且包含按十六进制表示的月份日期
生日日期(即示例中的4bd
, 它是十六进制的1213
)。
提示
CLion 可以在运行时自动输入命令行参数,点击位于在开发界面的右上角的调试设置,选择“编辑配置”
在配置框中的“程序实参”填入要输入的参数,多个参数间用空格分隔。如同所示,该配置将在运行时将额外传递两个参数I
和[
给程序。
解答:
#include <stdio.h>
#include <iso646.h>
#define BIRTHDAY_DATE_MONTH 12
#define BIRTHDAY_DATE_DAY 13
int main(int cnt, char **argv) {
int day, month;
// 获取输入的日期
if (cnt not_eq 3) {
// 第一个参数是获得的参数数量, 若数量不正确, 说明输入错误, 这时程序打印错误停止运行, 返回 -1
printf("Input value error!\n");
// 函数在运行到 return 后便会退出, 不会运行之后的代码
return -1;
}
// 获取“真正的”月份和日期
month = ((int) *argv[1]) - 64;
day = ((int) *argv[2]) - 64;
// 打印第一行
printf("%02d-%02d :\n", month, day);
// 判断是否是生日
if (day == BIRTHDAY_DATE_DAY and month == BIRTHDAY_DATE_MONTH) {
// 是生日
printf("%% %% %% %% %% %% %% %% %%\n");
printf("%% %03x %%\n", BIRTHDAY_DATE_MONTH * 100 + BIRTHDAY_DATE_DAY);
printf("%% ^ ^ %%\n");
printf("%% +------+ %%\n");
printf("%% +------+ %%\n");
printf("%% +--------+ %%\n");
printf("%% %% %% %% %% %% %% %% %% Happy birthday!\n");
} else {
// 不是生日
printf("%+d?%+d\n", BIRTHDAY_DATE_MONTH - month, BIRTHDAY_DATE_DAY - day);
}
return 0;
}
标签:第一天,%%,每日,C语言,日期,BIRTHDAY,printf,DATE,生日
From: https://www.cnblogs.com/tobe-goodlearner/p/basic_C_programming-day_1.html