scanf 的匹配原则不同的编译器不一样?
程序代码:
#include <stdio.h> int main(void) { char ch1 = 'a'; char ch2 = 'b'; scanf("%c,%c", &ch1, &ch2); printf("%c, %c\n", ch1, ch2); return 0; }
同一段程序在2012和6.0里面结果不一样,在6.0里能正常运行,但是到2012就不行了,一运行就出错(scanf已经改成scanf_s)
我的想法是,在6.0中,从键盘输入了 p,e 然后这三个字符存放在键盘输入缓冲区中,第一个控制符%c匹配了'p',格式控制字符串中的','匹配键盘输入缓存区的','第二个控制符%c匹配了'e'
我想请问,结束输入是因为缓存区中没有字符了还是因为最后敲了回车键?
还有就是为什么在2012中总是出错?是跟第三个边界检测的参数有关吗?