C/C++ scanf 函数中%s 和%c 的简单差别
首先声明:在键盘中敲入字符后,字符会首先保存在键盘缓冲区中供scanf函数读取(scanf。getchar等函数是读取缓冲区,getch函数是读取的控制台信息,即为直接从键盘读取)。另外特别注意键盘上敲入回车实际为“\r\n”,但存储到缓冲区时候会舍弃‘\r’而仅仅存储\n.比如我们敲入字符“12345回车”。缓冲区内存储的为“12345\n”.
文章中“_”代表空格
代码:
char *s;
scanf("%s",s);
printf("%s\n",s);
scanf("%s",s);
printf("%s\n",s);
例:
输入:123_345回车 “_”代表空格
输出:123
345
分析:对于scanf以%s格式输入时候。“空格、换行符、TAB”等是作为两个数据的分隔符存在的。即分隔符前后是两个数据,读入时候分隔符不读入。
例:
输入:123回车
456回车
输出:123
456
原因:如事例1,输入123回车后。缓冲区内存的是123\n。第一次读入后,缓冲区内仅仅剩余了\n,当第二次读入时候。\n是以分隔符存在的。不读入第二次的是。故缓冲区中是没有数据存在的,所以须要继续输入数据。
例:
输入:_回车 “_”代表空格
这样的输入会要求一直输入,这是由于空格和\n都是分隔符。没有数据。所以没办法读入。
相同直接输入回车也是一直要求输入
代码:
char *s;
scanf("%s",s);
printf("%s\n",s);
scanf("%c",s);
printf("%d\n",*s);
例:
输入:1234_12回车 “_”代表空格
输出:1234
32(空格的ASCII为32)
原因:对于第一个%s读入时遇到分隔符“空格”就停止,可是空格还是保存在缓冲区的。对于%c读入时候,“空格、\n、TAB”等是正常字符,所以第二次读入时候读取缓冲中的第一个字符“空格”。所以输出的是32.
事例2:
输入:123回车
输出:123
10(\n的ASCII为10)
原因:%s读入后缓冲中指剩下了\n故第二次以%c读入时候就读入了\n。输出为10.
转载于:https://www.cnblogs.com/wzzkaifa/p/6911650.html
C/C++ scanf 函数中%s 和%c 的简单差别相关推荐
- C语言中scanf()函数中的是什么
困惑初学者的C语言中scanf()函数中的&到底是什么 对于初学者而言,肯定有过这样一个困惑:为什么在使用scanf函数输入数据时有时需要在参数前加一个&,而有时却不用. 在回答&qu ...
- scanf函数中输入格式及输入基本原理讲解
前言:(本文所用测试全在vs2019) 本文主要是对 scanf函数输入中所需注意的形式,以及不同的格式下对于scanf函数输入的影响. scanf中基本原理的讲解,理解实现scanf函数的内部逻辑. ...
- 为什么scanf 函数中不能加\n
当代码是scanf("%d\n",&a);时 如果你输入数字后一直按回车,scanf就会一直阻塞在那里,直到你再一次输入. 而且运行结果只会识别第一个数,不会识别第二个数. ...
- 关于main函数中argc和argv的简单介绍
一般来说,刚开始学习写程序的人员经常会碰到如下形式的main函数,int main(int argc, char** argv)或者int main(int argc, char* argv[]),或 ...
- pythontk界面显示函数中的变量值_简单易学,西门子触摸屏3种修改变量值的方法!博图Wincc V14组态...
应条友要求,今天分享3种修改触摸屏变量值的最常用方法! 全文约700字,通读4分钟! 看完本章,你将收获以下内容: 一:必会知识点:3种修改变量的方法及适用点 二:实例:3种方法修改触摸屏变量值 三: ...
- scanf()函数的用法和实践
scanf()函数的用法和实践 摘要: 本文阐述了基于ANSI,Win 95,Win NT上的 C/C++语言中scanf()函数的用法,以及在实际使用中常见错误及对策. 关键词: scanf() 一 ...
- scanf函数详解与缓冲区
1.基本信息 函数原型: int scanf( char *format, args, ...); 函数返回值: 读入并赋给args的数据个数,遇到文件结束返回EOF,出错返回0. 函数功能: sca ...
- C++ scanf()函数安全性问题
scanf()是C语言中的一个输入函数.与printf函数一样,都被声明在头文件stdio.h里,因此在使用scanf函数时要加上#include <stdio.h>.(在有一些实现中,p ...
- scanf函数具体解释与缓冲区
1.基本信息 函数原型: int scanf( char *format, args, ...); 函数返回值: 读入并赋给args的数据个数.遇到文件结束返回EOF,出错返回0. 函数功能: sca ...
最新文章
- 微软职位内部推荐-SDEII
- WebService 的创建,部署和使用
- 【机器学习】太强了!这个建模神器可以玩一辈子
- 国内 GitHub 造假黑色产业链曝光;开源开发者撤销对 ICE 禁用的决定
- python鸭制作类代码_详细解释ducktyping鸭子类型程序设计与Python的实现
- C++ Custom Control控件 向父窗体发送对应的消息
- 计算机毕业设计的代码会查重吗,一般毕业论文会查重代码吗?
- python画微信公众号首图
- 常见WA错误总结(待更)
- nuc10黑苹果无法wifi上网
- 【NOIP2017提高A组集训10.25】嘟嘟噜
- react-shopping-cart尺码筛选
- 科目三 流程 记录 LTS
- 关于WinForm中Pannel的定位问题 May 18th, 2010
- java基础数据类型大小
- 刘海洋《LaTex入门》学习笔记2
- TiDB 悲观事务模式
- 球球音响机器人怎么合成的_球球大作战合成音响机器人孢子在哪合成
- XCode运行,提示build successed,无法启动模拟器
- 数据转换字符串 查字符串出现次数 位置返回字符串和操作方法 2021-05-26
热门文章
- python网络编程证书_python 网络编程——客户端
- OpenCV_01 简介+无版权安装+模块分析
- python网络爬虫系列(0)——爬虫概述 http协议复习
- 指令系统——数据寻址(2)(详解)
- python 动态属性和特性
- 流畅的Python 2. 数据结构 - 序列构成的数组
- LeetCode MySQL 1077. 项目员工 III
- LeetCode 549. 二叉树中最长的连续序列(树上DP)
- scrapy使用代理报错keyerror: proxy_爬虫Scrapy框架-Crawlspider链接提取器与规则解析器...
- java分治法求数列的最大子段和_Java十大经典排序算法动画解析和 代码实现