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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始


    char ch;
    scanf("%c",&ch);
    while (ch!='\n') {
        count++;
        scanf("%c",&ch);
    }
   
    printf("count = %d\n",count);

10 个回复

正序浏览
回复 使用道具 举报
66 加油 加油
回复 使用道具 举报
chensc 金牌黑马 2016-3-16 20:19:02
9#
学习学习!
回复 使用道具 举报
菜逼 发表于 2016-3-16 00:50
一个水果(char)篮,里面有香蕉(int),苹果(float),葡萄(double)等等

叫你拿香蕉,你就只会拿香蕉

哥们你举的真通俗,但是
我有点疑惑,是不是定义变量时都可以定义为char型,因为它适合所有格式
char type = 'a'/ type = 1 /type = 1.00f /type  = 1.1
这样行吗?
回复 使用道具 举报
我是王觉瘦 发表于 2016-3-16 01:44
简单说缓冲区就是一个池子.把输入的文件汇总到这个池子里面.然后计算机再从池子里读取.首先count没有声明和 ...

您精准的回答了我提出的问题,给我解惑了。
我非常感谢。
回复 使用道具 举报
何必ˇㄨ那么假 发表于 2016-3-16 00:44
1. 在执行scanf函数的时候,会让用户输入1个数据.
     数据输入完毕之后,并不是将这个数据直接赋值给变量.
...

非常感谢
回复 使用道具 举报
现在看了大家的解释,感觉更清晰了
回复 使用道具 举报
简单说缓冲区就是一个池子.把输入的文件汇总到这个池子里面.然后计算机再从池子里读取.首先count没有声明和初始化.其次程序的目的是检测又没有遇到换行(\n).当你第一次输入一个字符('a'),并以回车结束后.进入while的条件判断('a' != '\n'成立),进入循环count自增.然后要求再次输入.但是这时池子里面还有你上次剩下的回车,计算机就会直接读取这个回车.再次回到循环条件判断时条件不成立.巴拉巴拉
回复 使用道具 举报
一个水果(char)篮,里面有香蕉(int),苹果(float),葡萄(double)等等

叫你拿香蕉,你就只会拿香蕉
叫你拿苹果,你就只会拿苹果,
叫你拿水果呢.

系统会把缓冲区所有的内容都识别成char类型

你自己看看ascii表就懂了
回复 使用道具 举报
1. 在执行scanf函数的时候,会让用户输入1个数据.
     数据输入完毕之后,并不是将这个数据直接赋值给变量.
     而是先将数据存储在缓冲区 输入的任何数据都会存储在缓冲区中.

  2. 在执行scanf函数的时候.会先检查缓冲区中是否有数据.
     如果缓冲区中没有数据.那么就会让用户从键盘输入.
     如果缓冲区中有数据. 直接从缓冲区中将数据拿出来. 不会让用户输入数据.


  3. 当从缓冲区中拿数据的时候,如果要拿的数据的类型是整型或者实型.
     如果拿到的是空格 回车 Tab键 就会被自动忽略.继续往下拿.

     如果要拿的数据的类型是字符型.不会忽略任何数据.
     所以.当我们数字和字符混合输入的时候.字符的接收就有可能会出问题.


     解决方案: 在输入字符之前,将缓冲区中的数据全部清空.

     rewind(stdin);
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马