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.
C/C++ scanf 函数中%s 和%c 的简单差别的更多相关文章
- scanf函数中*修饰符的作用,如:%*d
在scanf函数中,*修饰符可以跳过所在项的输入.如下: #include <stdio.h> int main() { ; printf("请输入:"); scanf ...
- 在scanf函数中占位符使用错误而产生的一些错误
出现的问题 在做编程题的的时候,遇到了一个很奇怪的错误,出问题的代码如下: 1 #include <cstdio> 2 using namespace std; 3 4 int main( ...
- C语言中关于scanf函数的用法
scanf()函数的控制串 函数名: scanf 功 能: 执行格式化输入 用 法: int scanf(char *format[,argument,...]); scanf()函数是通用终端格式化 ...
- scanf函数(初学者)
scanf函数称为格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中. 1.scanf函数的一般形式:scanf函数是一个标准的库函数,它的函数原型在头文件“stdio.h”中,与pr ...
- scanf函数具体解释与缓冲区
1.基本信息 函数原型: int scanf( char *format, args, ...); 函数返回值: 读入并赋给args的数据个数.遇到文件结束返回EOF,出错返回0. 函数功能: sca ...
- C++入门经典-例2.5-使用附加格式说明scanf函数的格式输入
1:代码如下: // 2.5.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" int main() { long iLong; /*长整型变 ...
- C scanf 函数的其他使用注意点
1.scanf 函数中没有精度控制,如: scanf("%5.2f", &a )是非法的,不能企图用此语句数据小数位2位的实数 2.scanf中要求给出变量地址,如给出变量 ...
- while循环中使用scanf函数
妈的,这scanf函数学了快10年了,怎么还会出现莫名其妙的问题?看下面的代码(VS2012环境下运行): #define _CRT_SECURE_NO_WARNINGS #include<st ...
- C中gets()函数与scanf()函数说明
scanf( )函数和gets( )函数都可用于输入字符串,但在功能上有区别.若想从键盘上输入字符串"hi hello",则应该使用 gets 函数. gets可以接收空格:而sc ...
随机推荐
- thinkphp5 自定义验证码使用
控制器[https://blog.csdn.net/John_rush/article/details/80169702] public function verify(){ $captcha = n ...
- CSS3---关于文本
1.text-overflow用来设置是否使用一个省略标记(...)标示对象内文本的溢出. 2.但是text-overflow只是用来说明文字溢出时用什么方式显示,要实现溢出时产生省略号的效果,还须定 ...
- 第五讲:Fast RTL-level verification
1.good code styles 2.+rad compile time switch for compile 1.了解VCS 的架构 <===这方便了解不多 parser / even ...
- C++:别名 / 引用 的简单实用
文章来源:http://www.cnblogs.com/hello-tl/p/7910048.html /* C++别名操作 在更改别名的时候同时变量也会跟着改变 */ #include " ...
- 基本Sql语句汇总
关于Sql语句的学习,选择的DBMS为SQL Server,Sql语句随着工作中的应用不断补充,不具备系统性,为个人笔记汇总,网上有很多优秀的资源,故不对每一处应用做过多细致的说明,后期会对部分篇幅较 ...
- laravel count distinct
$result->count(\DB::raw("distinct(material_id)"));
- openstack创建虚拟机之后使用ssh登陆的解决办法
创建一个虚机之后:若果想要在horizon的控制台上登录操作,第一步.需要先使用ssh从controller上修改密码 从controller上登录: ssh ubuntu@虚机ip sudo su ...
- java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDriver
今天这个问题排查了好大一会,开始网上有人这么说: https://www.cnblogs.com/rookiebob/p/3749396.html 但是仍未能解决我的问题, 最后发现是只在外层的pom ...
- XV6锁
锁 xv6 运行在多处理器上,即计算机上有多个单独执行代码的 CPU.这些 CPU 操作同一片地址空间并分享其中的数据结构:xv6 必须建立一种合作机制防止它们互相干扰.即使是在单个处理器上,xv6 ...
- Computer (树形DP)
A school bought the first computer some time ago(so this computer's id is 1). During the recent year ...