哪里哪里写错了?-、

任务描述
2001年01月24日是农历辛巳蛇年的春节(大年初一),2002年02月11日是辛巳蛇年的除夕。赵中瑞的生日是2002年01月07日,所以我们称他为“辛巳蛇宝男”,赵中瑞想知道还有谁和他一样是“辛巳蛇宝男”,你帮他找出来。(不允许用if语句和switch语句)(提示:使用条件运算符 ? : )

输入格式:
一行中给出一个中华人民共和国的二代身份证号和姓名,中间没有空格。注意:身份证号倒数第2位若为奇数则为男生,若为偶数则为女生,你知道吗?

输出格式:
若是“辛巳蛇宝男”则输出:YES,否则输出:NO。

输入样例1:
为保密,样例中的身份证号前6位统一设为239999。

239999200003132617于龙
输出样例1:
NO
输入样例2:
239999200002210832杨冰
输出样例2:
NO
输入样例3:
239999200201131429张玮娜
输出样例3:
NO
输入样例3:
239999200201210017刘哲
输出样例3:
YES

img

应该要接收scanf的返回值,并去掉ll

int ret=scanf("%d%c",&a,&c);

第五行,把里面的ll去掉。

scanf("%d%c",&a,&c)

题目说不允许用if语句和switch语句,但是你坚持要用。

img

img

img


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

// 题目提示不准用if和switch语句了
// 什么证18位数,没必要用长长整型了
// 直接用字符串
// 7-10 17
// 2002 单数
// 甲子年60年为一个周期所以60的倍数加2002年是同样的
int main()
{
    char s[20], name[20], tmp[6];
    int year;

    puts("输入身份证以及姓名");
    scanf("%18[0123456789]s%s", s, name);

    strncpy(tmp, s + 6, 4);

    year = atoi(tmp);

    (year - 2002) % 60 == 0 && (s[16] - '0') % 2 != 0 ? puts("YES") : puts("NO");

    return 0;
}