1 概述

C和C++都没有将输入和输出建立在语言中,C++将输入输出的解决方案放在类库中(由头文件iostream和fstream中定义的类)

C++程序把输入和输出看作字节流。流充当了程序和流源流目标之间的桥梁。

C++输入输出类的派生关系:ios_base -> ios -> istream/ostream -> iostream

cin和cout是对象

2 cout

2.1 <<插入操作符

使用插入操作符可以有一下3种方法:1.一个cout接受的类型(int char long(包括signed/unsigned)float double long double),包括数值/变量/解除引用的指针/数组;2.char数组名或char的指针(必须是char */signed char */unsigned char*而不能是其他类型)3.引号引起的字符串

     int i = ;
int *p = &i;
cout<<*p<<" "<<p<<endl;
char *a = "hellow";
cout<<*a<<" "<<a<<endl;
char name[] = "world";
cout<<name<<endl;

输出结果:

也就是说对于非char类型的指针,必须是cout<<*p,否则cout<<p只是输出p的地址;而char类型的指针,cout<<*p相当于输出p[0],是cout<<p输出p指向字符串的全部内容,原因是cout<<原型中为char类型提供了单独的char指针类型,charl类型的字符串数组也是类似。总而言之对非char类型的指针或数组名正常处理,对于char类型的指针或数组名直接当作内容处理

2.2 拼接输出

<<插入操作符可以拼接,方法也可以拼接,如cout.pur('I').put('T')

2.3 cout.put();cout.write()

put输出字符,接收一个char类型的参数,或者将数值参数转化为char值

write输出字符串,接收两个参数,原型为:

 basic_ostream<charT,traints>& write(const char_type* s, streamsize n);

write遇到空字符时不会停止,即使超出边界,write仍继续打印

    cout.put('A')<<endl;
cout.put('A' + 0x20)<<endl;
cout.put()<<endl;
char *name = "hellow";
char *name1 = "world";
cout.write(name,)<<endl;

2.4 cout格式化值

对于char,数值整型,字符串显示在与其宽度相对应的字段中,对于浮点数,显示为6位(如果够6位),不够的末尾的0也不显示,当指数>=6或<=-5时以科学计数法显示,否则以定点表示法显示

     float i = 1.2;
float j = 1.23456789;
float m = ; //默认精读是6位
float n = 123456.789;
cout<<i<<endl;
cout<<j<<endl;
cout<<m<<endl;
cout<<n<<endl;
cout<<(n * 1e3)<<endl;

最后一行相当于1乘以10的3次方,此时指数大于6,用科学计数法表示

输出十进制:cout<<dec;八进制:cout<<oct;十六进制:cout<<hex    作用域,永久有效直到将格式状态改变为止。

2.5 cout.width();cout.fill();cout.precision()

width()方法有两种原型:

int width();         //返回字符宽度的当前设置

int width(int i);   //设置宽度为i,并返回以前的字符宽度

注意:width方法只影响接下来显示的一个项目,然后将字段宽度恢复为默认值;C++永远不会截短数据,当宽度不够会增加宽度,显示所有数据比保持列整洁更为重要

     int w = cout.width();
cout << "default field width = " << w << ":\n";
for(int i = ;i <= ;i++)
{
cout<<"width:";
cout.width(i);
cout<<i<<endl;
}

由于width()返回以前的宽度,故返回默认的宽度为0,程序表明width()只影响接下来被显示的一个项目

默认情况下用空格填充字段中未被使用的部分,可以用fill()方法来修改填充,比如用*填充写作cout.fill('*'),其作用域一直持续直到更改为止

cout.precision()为设置精度的方法,在默认情况下精度是指的总位数,在定点模式(fixed)和科学模式下精度是指小数点后面的位数,作用域也是一直有效,默认情况下精度是6位

     cout.precision();
float i = 1.2345678;
cout<<i<<endl;
cout<<fixed<<i<<endl;

2.6 cout.setf();cout.setf()以及C++的标准控制符

这类函数可以控制多种格式化特性,前者是用来设置格式,后者用来消除格式,比如:cout.setf(hios_base::showpoint),用来显示末尾小数点,但是这样用比较繁琐,所以C++提供了多个控制符,能够调用setf()

标准控制符直接在插入操作符后面使用,一些常见的标准控制符:

cout<<showbase;  cout<<noshowbase;  对于输出使用/不使用C++前缀

cout<<showpoint; cout<<noshowpoint;  显示/不显示末尾小数点

cout<<showpos;  cout<<unshowpos;        对于正数,显示/不显示 +

cout<<left; cout<<right;                           左对齐/右对齐

cout<<dec; cout<<oct; cout<<hex;           输出十进制/八进制/十六进制

cout<<fixed; cout<<scientific;                   使用定点/科学计数法

2.7 iomanip头文件

主要提供三个函数:setprecision();  设置精度

           setfill();      填充字符

           setw();       设置宽度

比较方便的是可以与cout语句拼接起来

3 cin

3.1 >>抽取操作符

cin>>______ 空格必须是cin接受的类型(int char long(包括signed/unsigned)float double long double),可以是变量,引用,被解除引用的指针,也可以是类或结构体成员

同cout一样也单独针对char类型的指针和数组做出单独的重载,可以直接使用数组名或指针,而对于非char类型的指针则必须要解除引用

     int a;
int *p = &a;
cin>>*p;
cout<<*p<<endl;
char name[];
cin>>name;
cout<<name<<endl;

3.2 cin>>检查输入

读取从非空白字符开始,到与目标类型不匹配的第一个字符之间的全部内容。输入与预期格式不匹配将导致cin>>结果为false

输入结束条件  :到与目标类型不匹配的第一个字符(比如Enter、Space、Tab键)

对结束符的处理 :丢弃缓冲区中使得输入结束的结束符(Enter、Space、Tab)

3.3 cin.get(); cin.getline();

cin.get(); cin.getline() 都提供不跳过空白的输入

cin.get()常用的有三种原型:cin.get(),  cin.get(char ),  cin.get(char *, int)

单字符输入可以用前两种,ch=cin.get() 与 cin.get(ch)是等价的,输入并显示一段带空格的字符串

     char ch;
while( (ch = cin.get()) != '\n')
cout<<ch;

字符串出入可以用cin.get(char *, int)或是cin.getline(char *, int)

输入结束条件  :读取到指定数目字符或换行符时停止读取

对结束符的处理 :get()将换行符留在输入流中,这样接下来的输入操作首先看到的书换行符,而getline()抽取并丢弃输入流中的换行符,用get()读取字符串时可以用一个cin.get()处理留在输入流中的换行符

     cin.get(array1,);
cin.get();
cin.get(array2,);

cin.get(array_name, Arsize)当输入的字符串超长时,不会引起cin函数的错误,后面的cin操作会继续执行,只是直接从缓冲区中取数据。但是cin.getline()当输入超长时,会引起cin函数的错误,后面的cin操作将不再执行

3.4 cin.peek()

返回输入中的下一个字符,但不抽取输入流中的字符,也就是仅查看,不抽取。比如屏蔽空格

 while( cin.peek() == ' ' )
cin.get();

3.5 cin.ignore();cin.read();cin.gcount();

cin.ignore(),接收两个参数,比如:cin.ignore(200,'\n')读取并丢弃输入流中的200个字符或是到达第一个换行符为止

cin.read(),接收两个参数,读取指定数目的字节,并将它们存储在指定的位置中,char gross[144]  cin.read(gross,144),一般与cout.write()一起用

cin.gcount(),返回最后一个非格式化抽取方法读取的字符数,意味着由get(),getline(),ignore(),read()方法读取的字符会被统计,而不是>>

     cout<<"输入一段字符:";
cin.ignore(,'\n');
char num[];
cin.read(num,);
cout<<"抽取的字符数:"<<cin.gcount()<<endl;
cout.write(num,)<<endl;

C++输入与输出的更多相关文章

  1. 了解一下C++输入和输出的概念

    我们经常用到的输入和输出,都是以终端为对象的,即从键盘输入数据,运行结果输出到显示器屏幕上.从操作系统的角度看,每一个与主机相连的输入输出设备都被看作一个文件.除了以终端为对象进行输入和输出外,还经常 ...

  2. [总结] I/O输入,输出

    I/O输入,输出第一:先判断到底是输入还是输出,站在程序的立场第二:判断是传递字节,还是字符,决定管道粗细,字节流是最基本的数据输出管道.字符类型管道专门用来传送文本数据.Java流的四大父类:1.字 ...

  3. C#语言基础— 输入与输出

    C#语言基础— 输入与输出 1.1函数的四要素:名称.输入.输出.加工 1.2主函数:输出语句.输入语句: Static viod Main(string[] stgs)//下划线部分可以自己指定 { ...

  4. Shell编程基础教程3--Shell输入与输出

    3.Shell输入与输出    3.1.echo        echo命令可以显示文本行或变量,或者把字符串输出到文件        echo [option] string             ...

  5. 不可或缺 Windows Native (4) - C 语言: 预处理命令,输入,输出

    [源码下载] 不可或缺 Windows Native (4) - C 语言: 预处理命令,输入,输出 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 预处理命令 输入 ...

  6. 输入和输出的总结(c语言)

    c语言中有多种的输入和输出方式,下面就简单总结一下: 一.输入的三种方式 (1)scanf scanf 函数可以在变量中使用,也可以在数组中使用,当然指针上也能用到,是一个很好的输入函数.scanf是 ...

  7. C++——输入、输出和文件

    一.C++输入和输出概述 1.1.流和缓冲区 C++程序把输入和输出看作字节流.输入时,程序从输入流中抽取字节:输出时,程序将字节插入到输出流中.对于面相文本的程序,每个字节代表一个字符,更通俗地说, ...

  8. C++学习42 输入和输出的概念

    我们经常用到的输入和输出,都是以终端为对象的,即从键盘输入数据,运行结果输出到显示器屏幕上.从操作系统的角度看,每一个与主机相连的输入输出设备都被看作一个文件.除了以终端为对象进行输入和输出外,还经常 ...

  9. C++:文件的输入和输出

    1.共同的打开文件方式: fin.open("test.txt",ios::binary) fout.open("test.txt",ios::binary) ...

  10. YTU 2609: A改错题--学生信息的输入和输出

    2609: A改错题--学生信息的输入和输出 时间限制: 1 Sec  内存限制: 128 MB 提交: 238  解决: 157 题目描述 注:本题只需要提交标记为修改部分之间的代码,请按照C++方 ...

随机推荐

  1. 使用OpenCV进行标定(转载)

    转载自牛猫靖  http://www.cnblogs.com/2008nmj/p/6278076.html 使用OpenCV进行相机标定 1. 使用OpenCV进行标定 相机已经有很长一段历史了.但是 ...

  2. poj2549 Sumsets

    Sumsets Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 11886   Accepted: 3273 Descript ...

  3. 7.Configurator API 详细介绍

    一.Configurator类介绍与API解释 1.Configurator类介绍 1)用于设置脚本动过的默认延时 2)功能 a.可调节两个模拟动作间的默认时间间隔 b.可调节输入文本的输入时间间隔 ...

  4. linux shell学习三

    Shell for循环 Shell for循环的语法如下所示 for 变量 in 列表 do command1 command2 ... commandN done 举例: ..} do echo $ ...

  5. [DeeplearningAI笔记]卷积神经网络3.10候选区域region proposals与R-CNN

    4.3目标检测 觉得有用的话,欢迎一起讨论相互学习~Follow Me 3.10 region proposals候选区域与R-CNN 基于滑动窗口的目标检测算法将原始图片分割成小的样本图片,并传入分 ...

  6. OpenCV---模糊操作

    推文:图像平滑处理(归一化块滤波.高斯滤波.中值滤波.双边滤波) 推文:图像的平滑与滤波 模糊操作 三种模糊操作方式 均值模糊 中值模糊 自定义模糊(可以实现上面两种模糊方式) 原理: 图像处理:基础 ...

  7. elasticsearch创建索引

    1.通过elasticsearch-head 创建 (1)登录localhost:9100 (2)点击复合查询 (3)输入内容 (4)勾选易读,点击验证是否是JSON格式 (5)点击提交请求,返回 { ...

  8. 调试android chrome web page简明备忘

    必备工具 adb tools.android chrome 先开启手机调试模式 adb forward tcp:9919 localabstract:chrome_devtools_remote 成功 ...

  9. 使用JavaScript实现使用鼠标画线的效果

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. Oracle数据库语句

    Oracle数据库语句 ORACLE支持五种类型的完整性约束 NOT NULL (非空)--防止NULL值进入指定的列,在单列基础上定义,默认情况下,ORACLE允许在任何列中有NULL值. CHEC ...