c语言里scanf,gets中遇到缓冲区的回车,怎么办?

img


以这个为例,像这样的scanf和gets遇到缓冲区里的回车,能解答一下结果为什么这样吗

加个getchar()接收掉换行符
scanf是遇到空格和换行符结束,但换行符会留在输入缓冲区
gets也是遇到换行符结束,但换行符不会留在输入缓冲区
所以gets前如果有scanf输入,则要加个getchar(),反之不需要
=====
感觉四个答案有些莫名其妙,没有一个是对的。C居然出现zzz,D前面两行x和y不可能,B前面两行对的,但后面x和y是不换行的,A第一行少个m,第三行后面应该是yyy