c语言中关于scanf输入与%c和%s的使用问题(附带缓冲区讲解)
scanf的输入问题
//这里是举例代码。
#include <stdio.h>
int main(void)
{char ch;scanf("%c", &ch);while(ch != 'g'){printf("%c",ch);scanf("%c",&ch);}return 0:
}
- 此题摘抄于C Primer plus 第六版第六章复习题第八题
当我们输入Go west,young man!时程序的运行结果是:Go west,youn
在弄清此题之前有必要先弄清计算机的输入输出与缓存区问题:计算机的标准输入stdin输出stdout并不是直接读取键盘里的数据,而是从缓冲区里读入数据。那么什么是缓冲区呢?缓冲区解释:即一块内存区,用在输入输出设备和cpu之间,用来缓存数据,是低速的输入输出设备和高速的cpu能协调工作,解放CPU,使其高效工作。
缓冲区分为三种:
- 全缓冲
- 行缓冲
- 不带缓冲
全缓冲:填满标准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的使用问题(附带缓冲区讲解)相关推荐
- C语言中使用‘scanf’输入与‘printf’输出的几个例子
C语言中使用'scanf'输入与'printf'输出格式及几个程序举例 初学者最常使用的就是键盘输入(scanf)和输出(printf) scanf的调用格式为: #include<stdio. ...
- c语言怎么同时输入两个字符,解决C语言中使用scanf连续输入两个字符类型的问题...
昨天用C编程,遇到一个关于scanf的细节问题,假如运行如下程序: #include int main() { char ch1,ch2; printf("Input for ch1:/n& ...
- C语言中几种输入方式
当我们输入一串字符或者数字时,需要一种标志作为输入结束的标志,所以我总结了以下几种: 1.输入一串字符串以回车键作为输入结束的标志 char ch; while(((ch=getchar())!='n ...
- c语言怎么用scanf输入字母,c语言输入字符串(c语言怎么用scanf输入字符串)
但是实际操作发现我的字符串无论输入的多长多短,都是输入的什么输出的就. 在C语言中,输入输出字符串有以下两种方式:1 用scanf/printf输入输出.scanf/printf是C语言的格式化输入输 ...
- c语言中为什么有时候输入一个数字之后要再输入一个才输出结果
c语言中为什么有时候输入一个数字之后要再输入一个才输出结果? 我是一个c语言的初学者,刚学这个的时候就发现这个问题了,我就琢磨为啥,后面发现原来是printf里面\n写习惯了再scanf里面也写了\n ...
- c语言中常用的输入输出函数有哪些,C语言中常用的输入和输出函数
C语言中常用的输入和输出函数 2020年03月11日 | 萬仟网IT编程 | 我要评论 1. scanf()函数 (Scan Format) + 函数原型: + 函数作用:从标准输入流 stdin ( ...
- python输入一个三位数、输出它的逆序数值_c语言 从键盘输入一个三位数,输出该数的逆序数。c语言中从键盘输入一个三位整数...
c语言 从键盘输入一个三位数,输出该数的逆序数. c语言中从键盘输入一个三位整数 www.zhiqu.org 时间: 2020-12-08 c语言中从键盘输入一个三位数,输出该数的逆序数,可以 ...
- c语言中数据的输入输出格式解析
数据的输入和输出 在C语言中数据的输入和输出都是通过函数调用来实现的 整型数据的输入输出 调用函数为printf和scanf 格式为printf("%d",x): scanf(&q ...
- 输入三角形的三c语言程序,请问c语言中 从键盘输入三角形的3边 调用三角形面积公式求面积 并输.,C语言编写程序,从键盘输入三角形三条边长(实数),计算并输出...
导航:网站首页 > 请问c语言中 从键盘输入三角形的3边 调用三角形面积公式求面积 并输.,C语言编写程序,从键盘输入三角形三条边长(实数),计算并输出 请问c语言中 从键盘输入三角形的3边 调 ...
最新文章
- 《Engineering》评选2021年全球十大工程成就 | 中国工程院院刊
- 【英语天天读】奥哈拉给女儿的信
- 国内技术原创氛围为什么那么差?记EAWorld(普元)是如何靠“借鉴”产出原创文章的!
- 美国通过热像无人机找到失踪老人
- dp递推 hdu1978
- MVVM是什么?谈谈你对MVVM的理解?
- form表单reset报 reset is not a function
- DARPA 想用自动化技术制造出最强的黑客
- CSS基本知识之盒子模型
- Moddable SDK为物联网开发提供JavaScript引擎:不到32KB
- WebGrid Enterprise
- 一款好看透明个人主页源码
- 专业计算机怎么关机,Win10如何使用快捷键来关机?_win10专业版技巧
- 酷狗音乐flac转换成mp3格式
- async-supported的作用
- 构建和管理有效API市场的关键步骤
- 字节跳动后端面经(17)
- 在Linux上部署一些简单的服务,Linux进阶必看,定时任务
- QMT量化交易软件使用攻略(二)-策略编写
- iOS开发笔记--基于面向协议MVP模式下的软件设计
热门文章
- 计算机毕业设计ssm校园花卉销售系统ef5ox (1)系统+程序+源码+lw+远程部署
- 吕校长的经验 | 今天给VIP客户讲解公司展厅,如果是你会怎么讲
- css动画制作幻灯片
- 什么是无线AP,无线AP和无线路由器之间有什么区别
- 基于JAVA钢材商贸公司网络购销管理系统计算机毕业设计源码+系统+lw文档+部署
- C++写的mfc架构的企业级股票行情软件源码
- 一个不错的像童话的梦
- 手把手教你在vue中使用自定义指令全局封装防抖节流函数
- 阿里钉钉的操作指南是什么
- DatabaseMetaData 获取数据表字段注释内容