我有几个问题;
上面的解释是输入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键也是输入呀,只不过他是不可见字符罢了