scanf的输入问题

 //这里是举例代码。
#include <stdio.h>
int main(void)
{char ch;scanf("%c", &ch);while(ch != 'g'){printf("%c",ch);scanf("%c",&ch);}return 0:
}
  1. 此题摘抄于C Primer plus 第六版第六章复习题第八题
    当我们输入Go west,young man!时程序的运行结果是:Go west,youn
    在弄清此题之前有必要先弄清计算机的输入输出与缓存区问题:计算机的标准输入stdin输出stdout并不是直接读取键盘里的数据,而是从缓冲区里读入数据。那么什么是缓冲区呢?

    缓冲区解释:即一块内存区,用在输入输出设备和cpu之间,用来缓存数据,是低速的输入输出设备和高速的cpu能协调工作,解放CPU,使其高效工作。

缓冲区分为三种:

  1. 全缓冲
  2. 行缓冲
  3. 不带缓冲
    全缓冲:填满标准I/O缓存后才进行实际I/O操作。
    即一次I/O操作就是一次请求,对于磁盘,一次I/O操作就是读或写磁盘某段扇区,读写完毕,I/O结束。eg:磁盘文件读写。

行缓冲:输入输出遇\n,执行I/O操作。输入字符先存放在缓存区,按下回车键才进行实际I/O操作。eg:键盘输入数据。

不带缓冲:eg:标准出错情况stderr,使出错信息尽快显示。

那么回归本体,本题涉及到标准输入即为行缓冲。scanf是从标准输入缓冲区中读取输入的数据,而%c的字符输入格式为只接收一个字符。那么当我们输入Go west,young man!时实际上这些字符只是存在与缓冲区中,当我们按下回车键(\n)时,I/O操作才开始执行。此时第一个scanf执行并录入’G‘,进行循环语句判断,之后的scanf会直接从缓冲区中读入接下来的字符,因此while循环语句会自动不断执行直至遇到’g‘循环终止,退出程序。

  • 同理%s也是如此,但是在使用%s时我们要注意一个问题,那就是空格问题。在使用%s输入字符时,若遇到空格(space)那么后面的字符将不在录入。看个例子
#include<stdio.h>
int main(void)
{char name[20];scanf("%s",name);printf("%s\n",name);
}

程序执行结果:

我再啰嗦的向大家拓展一下会车符(\n)也是会被记入缓冲区的,语言没有说服力那就看看代码吧!

#include<stdio.h>
int main(void)
{char ch1,ch2;printf("输入ch1:\n");scanf("%c",&ch1);printf("ch1:%c\n",ch1);printf("输入ch2:\n");scanf("%c",&ch2);printf("ch2:%c\n",ch2);
}

程序执行结果:

这里我只输入了’a‘和回车键,可以看到ch2没有赋值(或者说赋值回车)但是当我输入’‘ab’'时
这同样也佐证了上面的道理。

  • 以上就是我个人对scanf以及%c %s 的输入问题和缓冲区问题的看法,以上说明仅代表我个人观点,如有错误以及说明不恰当的地方欢迎各位批评指正,有问题也可以私信我,我们一起探讨解决。如有喜欢的欢迎各位关注我的博客,大家可以相互学习。

c语言中关于scanf输入与%c和%s的使用问题(附带缓冲区讲解)相关推荐

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

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

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

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

  3. C语言中几种输入方式

    当我们输入一串字符或者数字时,需要一种标志作为输入结束的标志,所以我总结了以下几种: 1.输入一串字符串以回车键作为输入结束的标志 char ch; while(((ch=getchar())!='n ...

  4. c语言怎么用scanf输入字母,c语言输入字符串(c语言怎么用scanf输入字符串)

    但是实际操作发现我的字符串无论输入的多长多短,都是输入的什么输出的就. 在C语言中,输入输出字符串有以下两种方式:1 用scanf/printf输入输出.scanf/printf是C语言的格式化输入输 ...

  5. c语言中为什么有时候输入一个数字之后要再输入一个才输出结果

    c语言中为什么有时候输入一个数字之后要再输入一个才输出结果? 我是一个c语言的初学者,刚学这个的时候就发现这个问题了,我就琢磨为啥,后面发现原来是printf里面\n写习惯了再scanf里面也写了\n ...

  6. c语言中常用的输入输出函数有哪些,C语言中常用的输入和输出函数

    C语言中常用的输入和输出函数 2020年03月11日 | 萬仟网IT编程 | 我要评论 1. scanf()函数 (Scan Format) + 函数原型: + 函数作用:从标准输入流 stdin ( ...

  7. python输入一个三位数、输出它的逆序数值_c语言 从键盘输入一个三位数,输出该数的逆序数。c语言中从键盘输入一个三位整数...

    c语言 从键盘输入一个三位数,输出该数的逆序数. c语言中从键盘输入一个三位整数 www.zhiqu.org     时间: 2020-12-08 c语言中从键盘输入一个三位数,输出该数的逆序数,可以 ...

  8. c语言中数据的输入输出格式解析

    数据的输入和输出 在C语言中数据的输入和输出都是通过函数调用来实现的 整型数据的输入输出 调用函数为printf和scanf 格式为printf("%d",x): scanf(&q ...

  9. 输入三角形的三c语言程序,请问c语言中 从键盘输入三角形的3边 调用三角形面积公式求面积 并输.,C语言编写程序,从键盘输入三角形三条边长(实数),计算并输出...

    导航:网站首页 > 请问c语言中 从键盘输入三角形的3边 调用三角形面积公式求面积 并输.,C语言编写程序,从键盘输入三角形三条边长(实数),计算并输出 请问c语言中 从键盘输入三角形的3边 调 ...

最新文章

  1. 《Engineering》评选2021年全球十大工程成就 | 中国工程院院刊
  2. 【英语天天读】奥哈拉给女儿的信
  3. 国内技术原创氛围为什么那么差?记EAWorld(普元)是如何靠“借鉴”产出原创文章的!
  4. 美国通过热像无人机找到失踪老人
  5. dp递推 hdu1978
  6. MVVM是什么?谈谈你对MVVM的理解?
  7. form表单reset报 reset is not a function
  8. DARPA 想用自动化技术制造出最强的黑客
  9. CSS基本知识之盒子模型
  10. Moddable SDK为物联网开发提供JavaScript引擎:不到32KB
  11. WebGrid Enterprise
  12. 一款好看透明个人主页源码
  13. 专业计算机怎么关机,Win10如何使用快捷键来关机?_win10专业版技巧
  14. 酷狗音乐flac转换成mp3格式
  15. async-supported的作用
  16. 构建和管理有效API市场的关键步骤
  17. 字节跳动后端面经(17)
  18. 在Linux上部署一些简单的服务,Linux进阶必看,定时任务
  19. QMT量化交易软件使用攻略(二)-策略编写
  20. iOS开发笔记--基于面向协议MVP模式下的软件设计

热门文章

  1. 计算机毕业设计ssm校园花卉销售系统ef5ox (1)系统+程序+源码+lw+远程部署
  2. 吕校长的经验 | 今天给VIP客户讲解公司展厅,如果是你会怎么讲
  3. css动画制作幻灯片
  4. 什么是无线AP,无线AP和无线路由器之间有什么区别
  5. 基于JAVA钢材商贸公司网络购销管理系统计算机毕业设计源码+系统+lw文档+部署
  6. C++写的mfc架构的企业级股票行情软件源码
  7. 一个不错的像童话的梦
  8. 手把手教你在vue中使用自定义指令全局封装防抖节流函数
  9. 阿里钉钉的操作指南是什么
  10. DatabaseMetaData 获取数据表字段注释内容