c语言的scanf在按下“Enter”键后到底发生了什么事情??

图片说明
图片说明

我有几个问题;
上面的解释是输入71.82后按下回车,回车被c1当作字符吸收了,c2吸收了'A';但是上面输入完b=7后,不是按下了回车键吗,最终输入了71.82按下回车后,键盘缓存中不是存留着两个回车吗?为什么c2不是吸收到回车??
scanf在按下“Enter”键后到底发生了什么事情?

执行scanf()函数时,在键盘输入回车会把之前的输入连同回车符一起送入缓存区,然后通过格式控制符匹配对应的变量,%d %f %e等,如果格式控制字符串中连写 会以空白字符(包括回车换行)区分不同变量,但%c会把任意单个字符认为有效输入,所以c1的值是个回车符。由于输入是按顺序匹配的,第一个回车被认为是区分不同变量的空白字符。

你这个程序是不是有点问题啊 scanf的括号里面

如果前面是空格的话 后面的被赋值变量之间也应该是空格的吧

这种问题根本不要问,看看源代码就知道了

http://www.cnblogs.com/cpoint/p/3373263.html
scanf内部调用getc获取的字符,一上来,首先判断的是参数(format),有了参数才判断分隔符。

 23            if (isspace(*format)) {
 24             while (isspace(*format))
 25                 format++;    /* skip whitespace */
 26             ic = getc(stream);
 27             nrchars++;
 28             while (isspace (ic)) {
 29                 ic = getc(stream);
 30                 nrchars++;
 31             }
 32             if (ic != EOF) ungetc(ic,stream);
 33             nrchars--;
 34         }

enter键也是输入呀,只不过他是不可见字符罢了