C++输入输出总结_输入
1. 输入输出的本质
C++中的输入输出都是通过流来进行的,而具体的输出输入都是通过对流进行操作来完成的,一般为定向一个流(重定向),清空流,向流里边添加新的元素。C++把输入输出看做字节流,输入时从字节流中抽取字节,输出时把字节插入到字节流中。
2.使用cin及其方法进行输入
cin对象将标准输入表示为字节流,通常情况下用键盘来生成这种字节流,常用的cin输入发方法为cin>>abc;而istream类对抽取运算符进行了重载,是之可以识别这些基本类型,unsigned/signed char&, char&, short&, unsigned short&, int&,unsigned int&,long&, unsigned long&, long long &, unsigned long long &, float& double &, long double&;对于这些基本类型直接就用cin加抽取运算符>>就可以实现。有个问题就在于>>抽取符会跳过换行符且回忽略类似于空白,制表之类的字符,所以这样的一段程序是有问题的,这段代码里面的循环将会永远的跑下去,单纯地用这种方法进行对字符类数据的输入就出现了很大的问题。
而对于要输入一个字符串如果用cin>>input;这样的方法来输入一个字符串,则遇到空白换行,制表之类的,输入都会停止
char a;
int times=;
cin>>a;
while(a!='\n')
{
cout<<a;
cin>>a;
times++;
}
cout<<times;
3. c++对字符串,字符,string类的输入//一下方法很好的解决了空白,换行等不被读取的情况。
C++对字符串,字符和string类输入的时候常用的get(),getline()函数,他们被称为非格式化输入,因为他们只读取字符,包括空白 ,换行符, 制表符,等也不会进行数据转换,读到啥就是啥。
在istream里边定义的get()函数与getline()函数:
用get进行单字符输入,在有参数或者没有参数的情况下,get函数读取一个输入字符,不管这个字符是啥换行,制表都可以,直接读进去。
其中get(void)将字符转换成整形后返回,对于get(char&)函数返回一个指向的调用它的istream对象的引用,这样就可以使用类似于cin.get(a).get(b).get(c);的方式来读取,这其中要注意get不会忽略换行符,所以要注意换行符被不小心读进去的情况。
如果读取倒了文件尾,或者键盘输入的尾部等没东西可读的情况的时候,cin.get(ch);会返回false,其余正常情况返回的都是true。
特征 | cin.get(ch) | ch=cin.get() |
传输输入特征 | 直接赋值给ch | 把函数返回值赋给ch |
读取到字符之后函数返回至 | 指向istream对象的引用 | 字符编码,其实是int值 |
达到文件尾时函数的返回值 | 转换为false | EOF |
注:键盘输入仿真的文件尾与真正的文件尾效果一样
get()函数
在istream中定义的get()函数一共有六项重载:使用的时候只要符合任意一种参数规则即可
1. int_type __CLR_OR_THIS_CALL get();//无参数,只读取一个字符,返回值为int型
2. _Myt& __CLR_OR_THIS_CALL get(_Elem *_Str, streamsize _Count);//接受两个参数,一个字符串首地址,一个int型的形参来控制最大读取字符数,为存放字符串末尾 //的/0,这个参数要比读取的字符串大一,该函数默认分界符为/n.
3. _Myt& __CLR_OR_THIS_CALL get(_Elem *_Str, streamsize _Count, _Elem _Delim);//与上边基本相同,不同之处在于这个函数分界符为自己定的_Delim.
4._Myt& __CLR_OR_THIS_CALL get(_Elem& _Ch);//接收参数为char型的引用,起作用就是把值直接赋给ch;
//在测试函数的时候有点发现,不能对字符串进行引用,因为数组是一个由若干个元素所组成的集合,所以无法建立一个数组的别名。
如果这块是 char &bbb = input[10]; //不能建立数组的引用。
//这块效果就是对input[0]进行引用。
5._Myt& __CLR_OR_THIS_CALL get(_Mysb& _Strbuf);
6._Myt& __CLR_OR_THIS_CALL get(_Mysb& _Strbuf, _Elem _Delim);//除第一个函数外其他函数返回值均为指向调用它的istream对象的引用。
以上函数在使用的时候都要主意只能使用cin.get(若干参数或者没有),get()函数在遇到换行符读取完字符时并不会读取换行符或者是本来的默认分界符,而这些东西都只会留在原始流之内,
char input[]
char ch;
cin.get(input,,'a');
cout << input << endl;
cin.get(ch);
cout<<ch<<endl;
输入sdsdsda
输出sdsdsd
a
getline()函数
在istream之中的getline()函数一共两项重载
1. _Myt& __CLR_OR_THIS_CALL getline(_Elem *_Str, streamsize _Count);
2. _Myt& __CLR_OR_THIS_CALL getline(_Elem *_Str, streamsize _Count, _Elem _Delim);
这两个函数类似于get()函数中的2 、3重载,其不同之处在于getline()函数会自动丢弃换行符等分界符。
char input[]
char ch;
cin.getline(input,,'a');
cout << input << endl;
cin.get(ch);
cout<<ch<<endl;
输入 sdsdsda
输出sdsdsd
因为丢弃分界符,则分界符a被丢弃,下面的cin.get(ch)读到的是换行符,所以输出的时候就只是输出一个换行符。
对string类的输入
单纯的应cin>>来输入一个string类字符串,则会在遇到空白,制表,换行等停止。
用getline()来读取string类, getline()在vs2010中函数定义在string文件中,共两个重构,且都为内联函数
1. template<class _Elem,
class _Traits,
class _Alloc> inline
basic_istream<_Elem, _Traits>& getline(
basic_istream<_Elem, _Traits>& _Istr,
basic_string<_Elem, _Traits, _Alloc>& _Str,
const _Elem _Delim)//使用的是自己定义的分界符,其参数为流定向类,第二个参数为输出目标string,第三个参数为自定义分界符
2. template<class _Elem,
class _Traits,
class _Alloc> inline
basic_istream<_Elem, _Traits>& getline(
basic_istream<_Elem, _Traits>& _Istr,
basic_string<_Elem, _Traits, _Alloc>& _Str)//默认的分界符为\n
这两个函数都没有字符串字符数上限的参数,因为string类会自己自动根据字符串的大小来调整大小。
C++输入输出总结_输入的更多相关文章
- Mybatis输入输出映射_动态sql_关联关系(一对一、一对多、多对多)
Mybatis输入输出映射_动态sql_关联关系(一对一.一对多.多对多)输入输出映射parameterType完成输入映射parameterType可以传入的参数有,基本数据类型(根据id查询用户的 ...
- Go语言标准库_输入/输出
Go语言标准库_输入/输出 转载节选自<Go语言标准库> Reader 接口 type Reader interface { Read(p []byte) (n int, err erro ...
- Python基本语法_输入/输出语句详解
目录 目录 前言 输入 raw_input input raw_input 和 input 的区别 输出 print print 基本格式化输出 print复杂格式化输出 flags标志位 width ...
- 04747_Java语言程序设计(一)_第9章_输入和输出流
例9.1一个文件复制应用程序,将某个文件的内容全部复制到另一个文件. import java.io.*; public class Example9_1 { public static void ma ...
- ACM的奇计淫巧_输入挂
什么是输入挂? 众所周知scanf比cin快的多,那么有没有比scanf更快的东西呢?答案就是输入挂,输入挂利用了告诉读取的函数getchar(),然后再人工处理成整数或浮点,比使用scanf快太多. ...
- 020_linux驱动之_输入子系统按键应用
(一)分配一个输入子系统结构体 static struct input_dev *buttons_dev; /*分配一个input_dev结构体*/ (二)设置这个输入子系统需要的动作 /* 1. 分 ...
- 20200427_ls_正在读取目录_输入/输出错误
环境: 在Centos7.2上挂载了一个2T的移动硬盘, 使用vim 在移动硬盘中编辑 .sh文件, wq的时候提示出错, 然后清空的文件, 可以正常wq出来 [root@localhost yido ...
- 编写Java程序_输入本部门五位员工的薪资,并根据用户输入的序号为指定员工进行提薪。若用户输入序号出现越界,则提示错误。
要求说明: 输入本部门五位员工的薪资,并根据用户输入的序号为指定员工进行提薪.若用户输入序号出现越界,则提示错误. 运行效果如图: 实现代码: import java.util.Scanner; pu ...
- 编写Java程序_输入一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
要求: 输入一个5位数,判断它是不是回文数.即12321是回文数,个位与万位相同,十位与千位相同. 实现代码: package kaoshi; import java.util.Scanner; pu ...
随机推荐
- C# 使用AngleSharp 爬虫图片
AngleSharp 简介 AngleSharp是基于.NET(C#)开发的专门解析HTML源码的DLL组件.根据HTML的DOM结构操作HTML,整个DOM已传输到逻辑类结构中.这种结构可以更好的操 ...
- django-高级视图和url配置
高级视图和url配置 一.URLconf技巧 1.流线型化函数导入 对于配置url,我们可以使用以下几种方式: (1)引入view中的函数 from firstSite.view import cur ...
- 第十八章 DjangoWeb开发框架
第十八章 DjangoWeb开发框架 第一课 内容概要: 1.JS正则 -登录注册验证 2.组件 1.BootStrap -css -js 学习BootStrap规则 2.jQueryUI -css ...
- Activity工作过程
Activity工作过程: Activity.startActivity--> Activity.startActivityForResult--> Instrumentation.exe ...
- 在测试crontab执行脚本的时候,修改了linux的系统时间,crontab不执行了。
今天在写服务器的perl脚本的时候,在完成一版脚本打算通过crontab来测试一下呢,因为直接执行脚本文件是没有问题的,但是当配置到crontab定期执行时就会出现问题,到了指定的时间了,但是脚本文件 ...
- session 与 coolie 的区别与联系
cookie 和session 的区别: session 在服务器端,cookie 在客户端(浏览器) cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗考虑到安全应当 ...
- android的Live架构
MVC.MVP.MVVM的选择 一开始我们在这几种框架上的选择上就没花太多的心思,因为他们都只是为了实现清晰的分层逻辑,差异化的地方无非是讲UI逻辑.交互逻辑.数据绑定逻辑.业务逻辑堆放在那一层的问题 ...
- json_encode处理json数据中文乱码
今天使用json_encode 把一个数组转换成json数据,echo处理的时候,显示为null.去查了php手册. 该函数只能接受 UTF-8 编码的数据. 在网上搜了下,找到了解决方法. < ...
- R语言︱函数使用技巧(循环、if族/for、switch、repeat、ifelse、stopifnot)
每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 后续加更内容: 应用一:if族有哪些成员呢?- ...
- Windows平台 python 常用包的安装
1. yaml 从http://pyyaml.org/wiki/PyYAML下载对应版本的exe,直接安装就可以. 2. pip 从https://pypi.python.org/pypi/pip#d ...