出生日期问题
输入某人的18位身份证号,输出其出生日期。
输入
多实例测试。首先输入一个整数n,表示测试实例的个数,然后是n行,每行是一个18位身份证号。
输出
对于输入的每个身份证号,输出一行,即其对应的出生日期,输出格式为:yyyy-mm-dd。
程序代码:#include <stdio.h>
void
prt ( int n )
{
char str[19];
int i, len = 0;
for ( i = 0; i < n; i++ ) {
printf ( "输入身份证号:" ) ;
fflush ( stdin ) ;
scanf ( "%18[0123456789xX]%n", str, &len );
if ( len < 18 ) {
printf ( "输入的身份证号长度不足18位\n请重新", str ) ;
continue ;
}
printf ( "出生日期为:%c%c%c%c-%c%c-%c%c\n", str[6],str[7],str[8],str[9], str[10],str[11], str[12],str[13] ) ;
len = 0 ;
}
return ;
}
int
main ( void )
{
int n;
printf ( "输入数据最大行数:" ) ;
scanf ( "%d", &n ) ;
prt ( n ) ;
return 0 ;
}
程序代码:
#include <stdio.h>
#include <stdlib.h>
void printBirth(char *);
int main(void) {
int i=0, n;
char *ID=malloc(19*sizeof(char));
if(!*ID) {
printf("again!\n");
exit(0);
}
L:
printf("INPUT N: ");
scanf("%d", &n);
if(n<1) {
printf("N ERROR!\n");
goto L;
} else {
for(i=0; i<n; i++) {
printf("INPUT ID NUMBER: ");
scanf("%s", ID);
if(strlen(ID)==18) {
printBirth(ID);
} else {
printf("ID ERROR!\n");
exit(0);
}
}
}
free(ID);
return 0;
}
void printBirth(char *p) {
int j;
for(j=6 ; j<10; j++) {
printf("%c",*(p+j));
}
printf("-");
for(; j<12; j++) {
printf("%c",*(p+j));
}
printf("-");
for(; j<14; j++) {
printf("%c",*(p+j));
}
printf("\n");
for(j=18 ; j>=0; j--) {
*(p+j)='\0';
}
}
