C语言问题 请输入自己的身份证号,输出出生年月日

我们老师教的是 先除以 1000 后4位就成0了 再除以100000000 中间都是0了 再用原数减 网上的其他方法看不懂 刚学C语言没多久 求详细过程

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
     char id[]="410246198704030811";
     printf("请输入您的身份证号(18位数字):\n");
     scanf("%s",id);
     printf("您出生在%c%c%c%c年%c%c月%c%c日\n",id[6],id[7],id[8],id[9],id[10],id[11],id[12],id[13]);
     system("pause");
     return 0;
}


追问

我一次性把不懂得问完吧 %s是什么 为什么出生年应该是第7位数 但要取id(6),后面的也是 生日最后一位应该是第14位 为什么取id(13) 抱歉过着这么久才看到 ,清明放假把C语言课都冲了 就没有管这作业了...

追答

没事。
你其实就问了两个问题。

1.%s是格式化输出字符串。
2.数组下标从0开始,所以第7位的数组下标是6,第14位的下标是14。

没事。
你其实就问了两个问题。

1.%s是格式化输出字符串。
2.数组下标从0开始,所以第7位的数组下标是6,第14位的下标是14。

13.

13.

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-04-01

我不知道是你没说清除还是怎么着你们老师的方法应该是求不出来的吧

#include<stdio.h>
main()
{
    char id[20];
    scanf("%s", id);
    printf("%c%c%c%c-%c%c-%c%c\n", id[6], id[7], id[8], id[9], id[10], id[11], id[12], id[13]);
    
}

输入字符串,从第七位开始输出就行了。身份证还有带X的呢,用除法怎么做?

第2个回答  2015-04-09

老师教的办法很扯蛋:34010419011204164X这个身份证号他的办法能解决吗?其实很简单:

//#include "stdafx.h"//vc++6.0加上这一行.
#include "stdio.h"
int main(void){
    char sfz[19];
    printf("Please enter your ID number:\nsfz=");
    scanf("%s",sfz);
    printf("Your birth date is \'%d-",(sfz[6]-'0')*1000+(sfz[7]-'0')*100+(sfz[8]-'0')*10+sfz[6]-'0');
    printf("%d-%d\'\n",(sfz[10]-'0')*10+sfz[11]-'0',(sfz[12]-'0')*10+sfz[13]-'0');
    return 0;
}

第3个回答  2015-04-01
身份证号有18位,无符号长整型unsigned long也存不下的,不适合用数值计算的方法解决此类问题。
因为身份证号的格式标准统一,所以可以使用字符串处理的方法实现。
1、把输入的身份证号保存到字符串中。
2、取其中的第7到14个字符
3、输出
第4个回答  2021-02-23
#include <stdio.h>
void main()
{
int a,b,c,d,e,f;
printf("请输入您的身份证号:");
scanf("%6d%4d%2d%2d%3d%c",&a,&b,&c,&d,&e,&f);
printf("\n地址码:%d\n出生日期:%d年%d月%d日\n顺序吗:%d\n校验码:%c\n",a,b,c,d,e,f);
}
相似回答