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 ...
随机推荐
- python解决鸡兔同笼问题
# 这个问题,是我国古代著名趣题之一. # 大约在1500年前,<孙子算经>中就记载了这个有趣的问题. # 书中是这样叙述的:“今有雉兔同笼,上有三十五头,下有九十四足, # 问雉兔各几何 ...
- Go:反射
一.通过反射获取类型信息 在 Go 程序中,使用 reflect.TypeOf() 函数可以获得任意值的类型对象(reflect.Type),程序通过类型对象可以访问任意值的类型信息. package ...
- 关键css
参考: 掘金-JS和CSS的位置对资源加载顺序的影响 起舞-什么是关键CSS 有兴趣也可以看看这里一篇关于页面加载的文章.以上掘金那篇文章说css的加载不会影响其他资源的下载,但是我测试了一下,发现是 ...
- 第七章:systemverilog过程语句
systemverilog增加了一些新的操作符和过程语句: 1.新的操作符 递增/递减 赋值操作符 设置成员操作符inside 有无关通配符==?/!=? 操作数改进(类型/尺寸/符号强制转换) 2. ...
- Linux基础(Ubuntu)
更换apt源为清华源 1.备份 /etc/apt/sources.list 2.vim 编辑 /etc/apt/sources.list 添加 deb http://mirrors.tuna.tsin ...
- os操作文件
os.makedirs('dirname1/dirname2') 可生成多层递归目录 os.removedirs('dirname1') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依 ...
- Ducci Sequence解题报告
A Ducci sequence is a sequence of n-tuples of integers. Given an n-tuple of integers (a1, a2, ... , ...
- idea 设置系列 各种乱码
http://blog.csdn.net/u013361445/article/details/51113692 把idea设置的好,才能用的好.
- 国内UED收录
腾讯 腾讯CDC http://cdc.tencent.com/ CDC(Customer Research & User Experience Design Center)腾讯用户研究与体验 ...
- Codeforces Round #297 (Div. 2) D. Arthur and Walls [ 思维 + bfs ]
传送门 D. Arthur and Walls time limit per test 2 seconds memory limit per test 512 megabytes input stan ...