出生日期问题
输入某人的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'; } }