先来思考一下短一点的代码, 思考一下, 印象更深刻;

#include <stdio.h>int main(void) {char a, b;scanf("%c", &a);printf("%c\n", a);scanf("%c", &b);printf("%c\n", b);
}

我输入1, 然后回车, 猜一猜打印的结果是什么?

悄悄告诉你, 回车键其实是'\n'键哦, 你按一下回车, 相当于输入'\n'哦

给你看看结果如何:

1

注意, 我只输入了一次, 程序就打印了1还有一行, 貌似是'\n'导致的换行, 重点是我只输入了运存, 程序就结束了哦, 明明有两个scanf, 不应该要输入两次吗?别急, 我慢慢和你分析, 一步一步引导你

为了放大现象, 如果我输入 12 然后回车, 猜一猜打印的结果是什么?

输入:

12

打印执行的结果如下:

1
2

好家伙, 为什么它会把它拆开呢, 而不是输入两次呢?

我现在暂时解释不了, 但是可以找规律, 然后猜测

猜想如下:

输入12然后按下回车, 相当于是输入了"12\n", 然后程序会将它们保留到一个叫做缓冲区的地方, 然后第一个scanf从缓冲区取出了第一个字符: '1', 然后因为缓冲区是有数值的, 所以第二个scanf就懒得让用户输入, 而是直接就用缓冲区剩下的第一个字符: '2', 假设, 程序还有第三个scanf, 那么它会让用户输入吗?并不会, 因为缓冲区还有字符'\n'呢, 它就懒得让用户输入了呢, 直接把'\n'取出来就用了, 这个猜想就能很好的解释上面的问题了呢!

那么如何才能让scanf勤奋一点呢?清空缓冲区就行了啊, 让他在缓冲区内找不到字符, 他也就不得不让用户输入了啊, 好家伙, 如何才能清空缓冲区呢, 清空缓冲区换言之就是刷新缓冲区, 只需要在没段scanf语句的下方加上个fflush(stdin);语句就能成功刷新缓冲区了, 可以观察下方代码:

#include <stdio.h>int main(void) {char a, b;puts("输入: ");scanf("%c", &a);fflush(stdin);printf("打印: %c\n", a);puts("输入: ");scanf("%c", &b);fflush(stdin);printf("打印:%c\n", b);
}

这样就成功清空缓冲区了, ok, 我们再来尝试一下输入12看看

输入:
12
打印: 1
输入:
ab
打印:a

要不要挑战一下稍微高难度的啊:

#include <stdio.h>int main(void) {char a;while ((a = getchar()) != '#') {switch (a) {case '1':printf("我老婆: 一花\n");break;case '2':printf("我老婆: 二乃\n");break;case '3':printf("我老婆: 三玖\n");break;case '4':printf("我老婆: 四叶\n");break;case '5':printf("我老婆: 五月\n");break;default:printf("先有圣人后有天, 我惠美如画中仙。\n");}}
}

假设, 我输入: 12345 然后按下回车, 猜一猜会打印什么结果?按照上面的分析思路思考哦!

先分析一下, 结果在最后面, 可以先看看结果也行:

输入12345然后回车, 相当于缓冲区中存了"12345\n"

那么第一次循环, (注意, 只要是输入都与scanf的效果类似), 取出了1, 打印第一个printf("我老婆: 一花\n");然后轮到第二次循环, 直接从缓冲区中取出2, 打印:printf("我老婆: 二乃\n");, 以此类推, 到达缓冲区还剩下'\n'的时候, 因为匹配不到, 所以就执行defalut语句下的printf("先有圣人后有天, 我惠美如画中仙。\n");, 所以, 输出结果为:

我老婆: 一花
我老婆: 二乃
我老婆: 三玖
我老婆: 四叶
我老婆: 五月
先有圣人后有天, 我惠美如画中仙。

c语言中输入scanf与getchar的啃爹之处相关推荐

  1. c语言数据输入方式scanf,【C语言】-数据输入-scanf( )和getchar( )

    格式化输入函数scanf( ) scanf( )功能: 按照指定的格式读入键盘上输入的若干个任意类型的数据,存入到argument参数所指向的内存单元,函数返回值为读入并赋给argument的数据个数 ...

  2. c语言怎么同时输入两个字符,解决C语言中使用scanf连续输入两个字符类型的问题...

    昨天用C编程,遇到一个关于scanf的细节问题,假如运行如下程序: #include int main() { char ch1,ch2; printf("Input for ch1:/n& ...

  3. C语言中使用‘scanf’输入与‘printf’输出的几个例子

    C语言中使用'scanf'输入与'printf'输出格式及几个程序举例 初学者最常使用的就是键盘输入(scanf)和输出(printf) scanf的调用格式为: #include<stdio. ...

  4. c语言如何输入数字,请问如何在C语言中输入数字获得拼音?

    请问如何在C语言中输入数字获得拼音? 答案:1  信息版本:手机版 解决时间 2018-12-10 16:41 已解决 2018-12-10 08:20 请问如何在C语言中输入数字获得拼音? 最佳答案 ...

  5. c语言判断一个数是否为质数的n次方,C语言中 输入一个数 判断这个数是否为3的N次方 求代码...

    C语言中 输入一个数 判断这个数是否为3的N次方 求代码 答案:4  信息版本:手机版 解决时间 2019-10-03 18:55 已解决 2019-10-03 01:54 C语言中 输入一个数 判断 ...

  6. 学C语言中输入输出函数,一篇就够了

    语言的输入输出语句有:"getchar(void);"和"putchar(int c);"."scanf("格式控制字符串",地址 ...

  7. 怎么在c语言中输入一串字母,C语言中如何输入一个数字n,再输入一串字母,控制字母个数为n(n是变量,1...

    C语言中如何输入一个数字n,再输入一串字母,控制字母个数为n(n是变量,1以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! ...

  8. c语言中输入x分段函数值,c语言程序改错:输入x,计算并输出分段函数y的值.0 x0...

    C语言 . 输入半径R ,并计算圆的面积S 和周长L .3. 编写一个程序实现把小写字母转换成大写字母.比如 #includeintmain(){floatr,s,l;scanf("%f&q ...

  9. c语言中输入大数,如何使用C语言实现输入10个数按从大到小的顺序排序输出

    本文主要向大家介绍了如何使用C语言实现输入10个数按从大到小的顺序排序输出,通过具体的内容向大家展示,希望对大家学习C语言有所帮助. 用选择排序法编写c语言,实现从键盘上输入10个数,按从大到小的顺序 ...

最新文章

  1. SQL Server 2008杀数据库连接
  2. 【高可用HA】Apache (4) —— Mac下配置Apache Httpd负载均衡(Load Balancer)之mod_jk
  3. SecureCRT连接linux,vim颜色显示问题
  4. 洛谷 - P2764 最小路径覆盖问题(最大流+二分图最小路径覆盖+路径打印)
  5. python调用浏览器全屏_javascript、js将页面全屏的方法(兼容多浏览器)
  6. .mod.c 是什么文件
  7. 计算机学科技术前沿:云计算主要平台及特性
  8. IOS NSNotification 通知
  9. 【优化求解】基于matlab遗传算法求解电力系统最优潮流问题【含Matlab源码 437期】
  10. mysql的三表查询语句_求三表联合查询的SQL查询语句
  11. MySql 大数据查询优化方案和超大分页的处理方法
  12. 【coq】函数语言设计 笔记 11 - rel
  13. Flutter 添加页面渲染完毕回调
  14. python爬虫表格table_Python基于pandas爬取网页表格数据
  15. 快速创建React Native App
  16. Display port
  17. Conflux 网络已获 Cobo 钱包支持
  18. 安卓微商助手高级版V2.4.6 群发多开检测僵尸粉等功能_海量微商工具
  19. sql 模糊搜素拼接
  20. android 输入法 确定按钮,Android项目:输入法软键盘显示/隐藏的监听和控制,InputMethodManager用法研究...

热门文章

  1. NOIP2016Day1总结
  2. python创建学生类姓名学号_Python练习题:由用户输入学生学号与姓名,数据用字典存储,最终输出学生信息(按学号由小到大显示)。...
  3. Python+Vue计算机毕业设计童童摄影馆管理系统yyt8p(源码+程序+LW+部署)
  4. vue+element实现树状菜单并底层菜单横向排列
  5. AutoCAD .NET API (.NET) 概述
  6. 自动安装第三方库python,python第三方库自动安装脚本
  7. 计算机基础:调整显示器分辨率及刷新率
  8. 教你用Python搞定视频剪辑
  9. React-简书项目
  10. 安全手册:学习如何选择合适的杀毒软件