输入一个人18位的身份证号码,从中读出其中第七位到第十位的出生年份,再输出年龄

输入一个人18位的身份证号码,从中读出其中第七位到第十位的出生年份,再输出年龄
要求:编写函数Get num_mn将一个字符串中的第m位到第n位取出,将其转换为整数,并返回该整数
在主函数中调用上述函数,获得身份证号码中的出生年份,用2822减去这个出生年份,获得年龄,再输出

我现在写给你!

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdbool.h>

int Get_num_mn(char *str, int m, int n);

int main()
{
char ID[19];
int year, age;


printf("请输入一个人的18位身份证号码:\n");
scanf("%s", ID);

year = Get_num_mn(ID, 7, 10);
age = 2822 - year;
printf("该人的出生年份是%d,今年的年龄是%d。\n", year, age);

return 0;
}

int Get_num_mn(char *str, int m, int n)
{
int i, num = 0;
for (i = m - 1; i < n; i++)
{
if (isdigit(str[i]))
{
num = num * 10 + (str[i] - '0');
}
else
{
printf("输入的身份证号码不合法,请重新输入。\n");
return 0;
}

详细代码及注释如下,望采纳

#include <stdio.h>
#include <stdlib.h>

int Get_num_mn(char* str, int m, int n) {
  // 抽取相应信息并转化格式
  int result = 0;
  for (int i = m; i <= n; i++) {
    result = result * 10 + (str[i] - '0');
  }
  return result;
}

int main() {
  char id_number[18];
  printf("请输入18位身份证号码: ");
  scanf("%s", id_number);

  // 提取出生年份
  int year_of_birth = Get_num_mn(id_number, 6, 9);

  // 计算年龄并输出
  int age = 2822 - year_of_birth;
  printf("Age: %d\n", age);

  return 0;
}

给你一个更细致的代码:

#include<stdio.h>
#include<string.h>
int main(){
    int a1,a2,a3;
    int n,y,r;
    int xin,age;
    scanf("%6d%4d%2d%2d%2d%1d%1d",&a1,&n,&y,&r,&a2,&xin,&a3);
    printf("你出生于%04d年%02d月%02d日\n",n,y,r);
    age=2021-n;
    printf("你今年%d周岁\n",age);
    if(xin%2==0)
      printf("你的性别为女");
    else 
      printf("你的性别为男");
    return 0;
}

代码如下,望采纳:

#include <stdio.h>
#include <string.h>

// 将字符串中的第m位到第n位取出,将其转换为整数,并返回该整数
int GetNum(const char* str, int m, int n) {
  int result = 0;
  for (int i = m; i <= n; i++) {
    result = result * 10 + (str[i] - '0');
  }

  return result;
}

int main() {
  char id[19];
  printf("请输入身份证号码:");
  scanf("%s", id);
  int year = GetNum(id, 6, 9);
  int age = 2822 - year;
  printf("年龄:%d\n", age);
  return 0;
}