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 ...
随机推荐
- 树莓派 - RasberryPi推送数据到cloudMQTT
创建用户 在https://www.cloudmqtt.com/上创建一个帐户 转到右上角的控制面板 点击"创建"按钮 安装lib sudo pip install paho-mq ...
- babel实践
现在的主流浏览器还没有完全兼容ES6的语法,如ie11就不支持箭头函数. 使用过es6的人都知道,es6更加简洁和强大,可是使用es6写出来的代码并不能得到所有主流js引擎的支持,针对这一点,一个解决 ...
- crm 简约笔记
crm# 给modelform使用的 tutor = models.ForeignKey(verbose_name='班主任', to='UserInfo', related_name='cla ...
- Cable master 求电缆的最大长度(二分法)
Description Inhabitants of the Wonderland have decided to hold a regional programming contest. The J ...
- LeetCode 304. Range Sum Query 2D – Immutable
Given a 2D matrix matrix, find the sum of the elements inside the rectangle defined by its upper lef ...
- vs2015 添加行件
VS自定义项目模板:[2]创建VSIX项目模板扩展 http://jingyan.baidu.com/article/bad08e1e9b08ee09c851210d.html
- Idea中配置svn时报 Can't use Subversion command line client: svn.Errors found while svn working copies detection.
https://www.cnblogs.com/wqh17/p/6881483.html
- BNUOJ 2345 Muddy Fields
Muddy Fields Time Limit: 1000ms Memory Limit: 65536KB This problem will be judged on PKU. Original I ...
- Python内置函数—bytearray
英文文档: class bytearray([source[, encoding[, errors]]]) Return a new array of bytes. The bytearray cla ...
- BZOJ 1221: [HNOI2001] 软件开发【最小费用最大流】
Description 某软件公司正在规划一项n天的软件开发计划,根据开发计划第i天需要ni个软件开发人员,为了提高软件开发人员的效率,公司给软件人员提供了很多的服务,其中一项服务就是要为每个开发人员 ...