简单程序——年月日的判断

简单程序——年月日的判断

#include "stdio.h"
void main()
{
   int a,b,c;
   printf("Please input year/month/day:\n");
   scanf("%d/%d/%d",&a,&b,&c);
   if(a%4==0&&a%100!=0||a%400==0) 
   {
       if(b==2) 
       {
          if (0<c&&c<30) printf("%d/%d/%d",a,b,c);
          printf("\n");
       }
   }
    else 
       {
           if(c==2) 
           {
               if (0<c&&c<29) printf("%d/%d/%d",a,b,c);
               printf("\n");
           }
       }    
       if((0<b&&b<2)||(2<b&&b<13))
       {
           switch(b)
           {
           case 1:
           case 3:
           case 5:
           case 7:
           case 8:
           case 10:
           case 12:if(0<c&&c<32)printf("%d/%d/%d",a,b,c);break;
           case 4:
           case 6:
           case 9:
           case 11:if(0<c&&c<31) printf("%d/%d/%d",a,b,c);break;
           default :printf("enter data error!\n");
           }
           printf("\n");
       }
}

如有错误,请多多指正,谢谢。

### 实现汇编语言中的日期输入与显示 为了实现接收并显示年月日的功能,在汇编语言中可以遵循特定结构化的方法。此方法涉及定义数据段、堆栈段,以及代码段,并通过一系列子程序完成具体功能。 #### 数据段和堆栈段的设置 在开始之前,需先声明用于存储变量的数据区,同时初始化堆栈指针以确保函数调用期间寄存器和其他重要信息的安全保存[^2]。 ```assembly section .data year db 0, 0, '/', 0 ; 年份占两个字符加一个斜杠作为分隔符 month db ' ', '/' day db ' ' section .bss input resb 8 ; 预留空间给用户输入 section .text global _start _start: mov esp, stack_end ; 初始化堆栈指针指向stack_end位置 ``` #### 获取用户输入 接下来是从键盘读取用户的输入。这里假设每次只允许输入单个字符直到遇到回车键为止;随后处理这些字符形成有效的日期字符串。 ```assembly read_input: lea eax, [input] call read_string ; 调用自定义或库内的字符串读入过程 ... ``` 对于实际应用而言,应当设计更复杂的逻辑去验证所接收到的信息是否符合预期格式——即确保存储的是合法的四位数代表年份、两位数字组成的月份及日子。 #### 显示日期信息 一旦获得了经过校验后的有效日期,则可以通过循环遍历上述创建好的缓冲区`year`, `month`, 和`day`来逐个打印出构成完整日期的各项元素。 ```assembly print_date: mov ecx, year ; 将起始地址加载到ecx以便后续操作 call print_char ; 输出'Y' inc ecx ; 移动至下一个内存单元准备下一轮迭代... cmp byte [ecx], '/' ; 判断当前是不是到了分隔符处 jne print_next_part ; 如果不是就继续执行其他部分的输出流程 push ecx ; 否则压栈保护现场 mov al, [ecx] ; 取得'/' int 0x10 ; BIOS中断服务例程负责屏幕绘制工作 pop ecx ; 恢复原先的状态 jmp end_printing ; 结束整个打印环节 print_next_part: ... ; 对应于Month或者Day字段的操作同理可参照Year的做法 end_printing: ret ``` 以上片段展示了基本框架下的伪代码样例,其中省略了一些细节性的指令序列,比如具体的BIOS中断调用来控制硬件行为或是针对不同操作系统环境可能存在的差异性API调用方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值