这段有关格式控制符的代码,怎么分析呀

代码如下
变量类型与格式描述符类型不匹配,输出项与格式描述符个数不符
为什么还可以正常输出,没有异常
这段代码为什么可以跑


#include <stdio.h>
main()
{
    char ch;
    int k;
    ch='a';
    k=12;
    printf("%c,%d,",ch,ch,k);
    //变量类型与格式描述符类型不匹配
    //输出项与格式描述符个数不符
    printf("%k=%d\n",k);
    //为何最终可以输出 a,97,k=12
}

第一个p语句中,第二个ch,char被视作int输出,所以输出a的相应的ASCII码,多余的k被忽略了,
第二个p语句中,%k不构成格式化占位符,且%需要用%%这样的格式输出,所以%被忽略
应该是这样