开篇闲话:
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;
}
初学,代码只能写成这样了,纷繁臃肿了些,后面学了好的数据结构再改善。若解题过程有不妥之处或有误,还请各位大佬不吝赐教。