A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

看了大师的视频,对scanf函数的缓存区的问题一知半解,请了解的朋友详细解释一下,不胜感激~

代码:
char ch='';                 //定义变量
int count=0;              //定义变量
scanf("%c",&ch);        //接收用户输入
while(ch!='\n'){          //当ch的值不是\n时(\n为按键盘回车输入进来的值)
       scanf("%c",&ch);
}

大师在视频中写到:
scanf的原理是:如果缓存区不为空,不会让用户再次输入内容,而直接从缓存区中继续获取.

疑问:假如我先输入个a,a!="\n"代码就会进入到循环。输入完a后还可以继续输入,因为scanf函数的缓存区已经有了一个a了啊,怎么还可以继续输入字符?上面说缓存区不为空用户是不可以输入的啊(也就是说缓存区只有在空的情况下,才可以继续输入的)。

14 个回复

倒序浏览
我是这样理解的,当第一次输入a的时候,如何你此刻回车那就不会进到while循环里;当你继续输入的时候就要进入while循环里面,你可以任意输入直到你输入‘\n’为止,之后你可以打印输出你的输入内容,你可以全部打印输出也可以部分输出,当你是部分输出的时候由于存储空间还存有内容,这是是不能再输入的?老师应该说的是此刻不能再输入了。
回复 使用道具 举报
你列举的例子是:
scanf(“%c”,&a);
scanf(“%c”,&b);
scanf(“%c”,&c);
......
这种情况是每个scanf函数都有各自的缓冲区,就是有多个缓冲区的情况。
而老师讲的那种情况是,一个scanf函数输入多个字符scanf(“%c%c%c”,&a,&b,&c);的情况,这种就只有一个缓冲区。
这两种情况要分清楚哦~
回复 使用道具 举报
http://bbs.itheima.com/thread-212811-1-1.html
这是我之前发的帖子,和你说的是一个意思。
回复 使用道具 举报
顶一个!
回复 使用道具 举报
a不是已经存放到ch里面了吗,判断一次之后不是又重新接收字符吗
回复 使用道具 举报
llo 来自手机 中级黑马 2015-7-19 12:29:33
7#
落水的兔子 发表于 2015-7-19 12:07
a不是已经存放到ch里面了吗,判断一次之后不是又重新接收字符吗

缓存里面已经有数据后  他会先从缓存中读取
回复 使用道具 举报
紫荆秋雪 发表于 2015-7-18 21:57
我是这样理解的,当第一次输入a的时候,如何你此刻回车那就不会进到while循环里;当你继续输入的时候就要进 ...

后来我弄了好半天才理解了老师说的是这个意思。
因为只有一个scanf(),所以只有一个缓存区。
我是要接收一个char类型的数据,所以当用户输入的abcd的时候只能接收到一个a,
其余的bcd还在缓存区中。。
回复 使用道具 举报
杨远鹏 发表于 2015-7-18 22:45
你列举的例子是:
scanf(“%c”,&a);
scanf(“%c”,&b);

嗯,你说的对!
回复 使用道具 举报
wdcew 中级黑马 2015-7-21 20:39:01
10#
看过后有一种恍然大悟的感觉!!!!
回复 使用道具 举报
wdcew 发表于 2015-7-21 20:39
看过后有一种恍然大悟的感觉!!!!

多多交流:lol
回复 使用道具 举报
看过发现自己也不是很明白
回复 使用道具 举报
不太懂。。。
回复 使用道具 举报
我的呸 发表于 2015-7-22 08:32
看过发现自己也不是很明白

多敲代码试试
回复 使用道具 举报
表示还没看到while语句 下午看!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马