C/C++的几个输入流
C:
1.scanf( )
存在于<stdio.h>(C++为<cstdio>)中,根据stdin读取数据并根据参数格式进行赋值,以第一个非空格字符(空格字符如:空格,制符表,换行符)为起点。一般键盘输入时,返回成功赋值的参数的个数如:0(失败),1(成功赋值一个),2,...
开始&结束标志: 常见的数值赋值、单个字符赋值时,以第一个非空格字符为开始标志,以空格字符为结束标志。但是以换行符为键盘缓冲区结束标志(整数、字符、字符串都会出现下图情况)。所以使用"%s"进行字符串赋值时,无法赋值空格字符。
附,格式说明:
i |
整数 |
---|---|
d/u | 十进制整数(u是无符号数) |
o | 八进制整数 |
x | 十六进制整数 |
f |
浮点数(似乎是所有进制的,如16进制浮点数前面加 '0x') |
e | e指数形式的浮点数 |
g | g自动选择合适的类型 |
c | 字符 |
s | 字符串 |
p | 指针地址 |
%hd、%hu | short int、unsigned short int |
---|---|
%d、%u |
int、unsigned int |
%ld、%lu | long int、unsigned long int |
%lld、%llu | long long int、unsigned long long int、 |
%f | float |
%lf | double |
%Lf | long double |
%c | char |
%s | char * / char[ ] |
2.getchar( )
存在于<stdio.h>中,返回读取的字符的ASCII码,返回类型为int。(一个字符一个字符地读取)
一般情况下getchar( )会开启输入(如:键盘)缓冲区,并且该缓冲区以换行符为结束。但是此时getchar( )只读取了一个字符,导致换行符还存在于缓冲区内。
第一次输入“A”+“回车”;//可以明显地看到b=“回车”;
第二次输入“YYY”+“回车”
第三次输入“EEE”+“回车”
综上,无delim,不丢弃任何字符,一次读一个字符,包括空格符、制表符、换行符。
如图:(第16行while的条件用来去除缓冲区中的“换行符”)
3.gets(char * str)
存在于<stdio.h>中,原型为char * gets ( char * str ),返回str。
以换行符为结束标志,将所有字符(包括空格)赋值给字符数组,并丢弃delim
目前来看只能进行 字符数组 的赋值,如图
C++:
4.std::getline(istream& is, string& str, char delim)
原型:
- istream& getline (istream& is, string& str, char delim);
- istream& getline (istream&& is, string& str, char delim);
- istream& getline (istream& is, string& str);
- istream& getline (istream&& is, string& str);
存在于<string>中,可以认为是gets( )的string版,返回str,并丢弃delim。
输入流必须指定,默认情况下终结符为“换行符”(“\n”)。
5.std::istream::getline(char* s, streamsize n, char delim)
存在于<istream> <iostream>中,可以认为是gets( ),返回istream该对象的指针,并丢弃delim。
原型:
- istream& getline (char* s, streamsize n );
- istream& getline (char* s, streamsize n, char delim );
6.std::istream::get()
存在于<istream> <iostream>中,可以认为是gets( ),因为重载函数比较多。返回istream该对象的指针,不丢弃delim。
原型
- int get();
- istream& get (char& c);
- istream& get (char* s, streamsize n);
- istream& get (char* s, streamsize n, char delim);
- istream& get (streambuf& sb);
- istream& get (streambuf& sb, char delim);
最新文章
- Disabling default console handler in Java Logger by codes
- python基础——面向对象编程
- js 获取时间差
- 感知开源的力量-APICloud Studio开源技术分享会
- Flask-在浏览器中直接显示文本文件中的内容
- django - transaction
- 44个JAVA代码质量管理工具(转)
- JavaEE XML StAX创建
- 简单的Android之apk包反编译方法
- 设置iPhone网页固定到桌面上的图标
- appium python andiroid自动化文档整理笔记
- Redis随笔(一)Linux Redis 搭建
- 蚂蚁爬杆问题 UVA 10881
- 数组属性的习题、Arrays工具、二维数组
- HBase 是列式存储数据库吗
- ubuntu apt 安装 mpv
- UE4 材质编辑
- 阿里云CentOS下nodejs安装
- C# Newtonsoft.Json JsonSerializerSettings 全局序列化设置
- 大数据系列之并行计算引擎Spark介绍
热门文章
- Java集合框架中底层文档的List与Set
- 创建虚拟机,安装操作系统,xshell6远程链接
- Java线程之ThreadLocal
- [BZOJ1123]:[POI2008]BLO(塔尖)
- python中的定时器threading.Timer
- SSRF和XSS-filter_var(), preg_match() 和 parse_url()绕过学习
- 实验四《Android程序设计》实验报告封面
- Xcode使用介绍之一:Xcode简介+创建App应用
- react 的定义组件(了解)
- Mysql中两个select语句的连接