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;这样的方法来输入一个字符串,则遇到空白换行,制表之类的,输入都会停止

 1 char a;
 2 int times=0;
 3 cin>>a;
 4 while(a!=‘\n‘)
 5 {
 6     cout<<a;
 7     cin>>a;
 8     times++;
 9 }
10 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()与cin.get(ch)的比较
特征 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[10]
char ch;
cin.get(input,10,‘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[10]
char ch;
cin.getline(input,10,‘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类会自己自动根据字符串的大小来调整大小。

时间: 2024-10-16 08:06:00

C++输入输出总结_输入的相关文章

C++ Primer笔记10_运算符重载_赋值运算符_输入/输出运算符

我们致力于推广Scriptcase,以产品销售.技术支持.培训服务.外包开发为核心,将Scriptcase这一简单易用的工具真正在国内予以推广.我们搭建了Scriptcase的示例网站,通过该网站可以看到在几乎不需要任何编程的情况下,Scriptcase可以做到如何快速和先进的开发. 敬请访问 www.phpscriptcase.com C++ Primer笔记10_运算符重载_赋值运算符_输入/输出运算符

网易_输入坐标输出值

2.如图: 7 8 9 10 6 1 2 11 5 4 3 12 16 15 14 13 设“1”的坐标为(0,0) “7”的坐标为(-1,-1) 编写一个小程序,使程序做到输入坐标(X,Y)之后显示出相应的数字. 方法一.先求出需要拐弯的次数times以及最后一次拐弯后还需要走的步数dif.然后在主函数里计算最终的坐标位置.这种解法与题设不符合.不过写的挺好. #include<iostream>using namespace std; enum X{RIGHT = 1, DOWN = 1,

ACM的奇计淫巧_输入挂

什么是输入挂? 众所周知scanf比cin快的多,那么有没有比scanf更快的东西呢?答案就是输入挂,输入挂利用了告诉读取的函数getchar(),然后再人工处理成整数或浮点,比使用scanf快太多. 什么时候用输入挂? 当输入规模达到1×10^6次方的时候,就需要输入挂,否则很有可能超时. 代码 代码不是我写的,此处给出出处:http://www.cnblogs.com/xiaohongmao/archive/2012/05/29/2523760.html 整数 inline bool sca

AP9403LED驱动升压恒流芯片_输入3.6-24V

AP9403升压芯片 一般描述:AP9403稳压器是固定频率PWM升压(升压)LED驱动芯片,能够驱动具有优良线路和负载调节的1W LED单元.该调节器使用简单,因为它包括内部频率补偿和固定频率振荡器,因此它需要最少数量的外部元件工作.AP9403可直接驱动6系列1W LED单元在VIN>12V.PWM控制电路能够将占空比线性地从0调整到95%.启用功能,内置过电流保护功能.内置补偿块以最小化外部元件计数. 特征:宽3.6V至24V输入电压范围0.22V FB可调LED驱动电流直接驱动6系列1W

词频统计_输入到文件

/*337.in.txt: *To being or not to being , is a question . *Do you have a question . *Yes , I have a question . I like apple , apple a very declicious ! ***/ /*337.out.txt: *所有单词为:    单词数为: Do              1 I               2 To              1 Yes    

[[其他教程]] 2015年最新版iOS基础视频_最适合初学者入门

主讲:孙庆虎类型:iOS 适合对象:初学者入门视频介绍:本视频是iOS学院精心录制的免费精华版iOS语言基础视频,该视频特点在于最大程度保证了知识点的完整性,按知识点进行视频录制,每个视频控制在20分钟左右,不会使学生产生疲劳,授课讲究通俗易懂.幽默风趣.绝对干货.通过该视频的学习,相信你能够轻轻松松地入门C语言,为iOS开发学习打下坚实的基础. 视频概况: 第01天内容 01.尚学堂_孙庆虎C语言_mac os x的基本用法02.尚学堂_孙庆虎C语言_mac os x文件系统及常用终端命令03

python基础(3):输入输出与运算符

今天总结一下最基础的输入输出和运算符 输入: python3里都是input("") input() name = input()    #输入的值会直接赋值给name name = input("请输入你的姓名:")    #("")里的话是输入提示信息 ps: 输入的值会直接赋值给name. input输入的值都是str类型如果想要输入数值类型的值可以:name = int(input())其它类型输入方法雷同. 输出: 输出刚才的name值

关于OJ的输入和输出(转)

ACM竞赛之输入输出以下内容来源于互联网.在ACM程序设计竞赛中,一道题目的所有测试数据是放在一个文本文件中,选手将一道题目的程序提交给评判系统运行,程序从该文件中读取测试数据,再把运行结果输出到另一个文本文件中.系统把输出文件与标准答案比对,来评判程序编写得正确与否.ACM现场赛采用的输入输出形式有(1)文件输入.标准输出:(2)文件输入.文件输出:(3)标准的输入输出.而Web形式的ACM程序设计在线评判系统一般采用标准的输入输出,但输入结束有文件末尾标识(EOF),这可以用于确定输入结束.

hdu 1317 XYZZY 国产SPFA算法AC,,题目输入部分真特么难懂。。内有解析

XYZZY Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 3017    Accepted Submission(s): 824 Problem Description It has recently been discovered how to run open-source software on the Y-Crate gami