身份证号——生日问题

开篇闲话:
C语言的学习显然是一个漫长的过程,在此过程中肯定会遇到很多问题、犯诸多错误。将学习过程记录在此,以便往后回过头来看以前的自己。

问题描述:

输入:身份证号码

输出:出生年月日

举例:输入:xxxxxx20200225xxxx;输出:2020年02月25日

解题思路:
将输入的18位身份证号码看成一串字符串,共18个字符,输入到输入缓冲区后有19个字符(包括换行符'\n')。然后按顺序一个一个地输出年份月份和日期,并在必要之处插入“年”“月”“日”,其余字符废弃。
一个一个地取字符用getchar函数,用一个字符型变量c存放取到的字符;用int型变量i标识字符的顺序。i取[7,14]时,输出对应的字符(用putchar函数和printf函数都可以,我个人用比较熟练的printf函数)。
当i =10,12,14时,用一个While循环输出年月日。While套在另一个循环之内,并且该循环有i++语句,为了跳出循环并且不导致i改变,用break语句实现。
代码如下:

/*问题:输入一个身份证号码,输出出生年月日
        Written by:Jimmy Tung
        Date :2020.02.25
*/

#include <stdio.h>

int main(void)
{
    char c;
    int i;
    printf("请输入身份证号码:");
    c = getchar();
    for(i = 1 ; i <= 18 ; )//身份证号码有18位
    {
        while(7 <= i && i <= 10)//读取年份
        {
            printf("%c", c);
            c = getchar();
            while(i == 10)//在年份后面输出”年“
            {
                printf("年");
                break;//跳出当前循环
            }
            i++;
        }

        while(11<= i && i <= 12)//输出月份
        {
            printf("%c", c);
            c = getchar();
            while(i == 12)
            {
                printf("月");
                break;
            }
            i++;
        }

        while(13<= i && i <= 14)//输出日期
        {
            printf("%c", c);
            c = getchar();
            while(i == 14)
            {
                printf("日");
                break;
            }
            i++;
        }
        c = getchar();//废弃字符
        i++;
    }
    printf("\n");
    return 0;
}

初学,代码只能写成这样了,纷繁臃肿了些,后面学了好的数据结构再改善。若解题过程有不妥之处或有误,还请各位大佬不吝赐教。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。