C++输入与输出
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++输入与输出的更多相关文章
- 了解一下C++输入和输出的概念
我们经常用到的输入和输出,都是以终端为对象的,即从键盘输入数据,运行结果输出到显示器屏幕上.从操作系统的角度看,每一个与主机相连的输入输出设备都被看作一个文件.除了以终端为对象进行输入和输出外,还经常 ...
- [总结] I/O输入,输出
I/O输入,输出第一:先判断到底是输入还是输出,站在程序的立场第二:判断是传递字节,还是字符,决定管道粗细,字节流是最基本的数据输出管道.字符类型管道专门用来传送文本数据.Java流的四大父类:1.字 ...
- C#语言基础— 输入与输出
C#语言基础— 输入与输出 1.1函数的四要素:名称.输入.输出.加工 1.2主函数:输出语句.输入语句: Static viod Main(string[] stgs)//下划线部分可以自己指定 { ...
- Shell编程基础教程3--Shell输入与输出
3.Shell输入与输出 3.1.echo echo命令可以显示文本行或变量,或者把字符串输出到文件 echo [option] string ...
- 不可或缺 Windows Native (4) - C 语言: 预处理命令,输入,输出
[源码下载] 不可或缺 Windows Native (4) - C 语言: 预处理命令,输入,输出 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 预处理命令 输入 ...
- 输入和输出的总结(c语言)
c语言中有多种的输入和输出方式,下面就简单总结一下: 一.输入的三种方式 (1)scanf scanf 函数可以在变量中使用,也可以在数组中使用,当然指针上也能用到,是一个很好的输入函数.scanf是 ...
- C++——输入、输出和文件
一.C++输入和输出概述 1.1.流和缓冲区 C++程序把输入和输出看作字节流.输入时,程序从输入流中抽取字节:输出时,程序将字节插入到输出流中.对于面相文本的程序,每个字节代表一个字符,更通俗地说, ...
- C++学习42 输入和输出的概念
我们经常用到的输入和输出,都是以终端为对象的,即从键盘输入数据,运行结果输出到显示器屏幕上.从操作系统的角度看,每一个与主机相连的输入输出设备都被看作一个文件.除了以终端为对象进行输入和输出外,还经常 ...
- C++:文件的输入和输出
1.共同的打开文件方式: fin.open("test.txt",ios::binary) fout.open("test.txt",ios::binary) ...
- YTU 2609: A改错题--学生信息的输入和输出
2609: A改错题--学生信息的输入和输出 时间限制: 1 Sec 内存限制: 128 MB 提交: 238 解决: 157 题目描述 注:本题只需要提交标记为修改部分之间的代码,请按照C++方 ...
随机推荐
- JAVA实现Excel批量导入
一.模板下载: 先将模板放在项目WebRoot下的download文件夹下: /** * @Title: downloadFile * @Description: 模板下载 (网络地址) * @par ...
- Update submitted Perforce changelist description by P4.net api
Firstly download the p4.net sdk from Perforce official site's download page. It's a .zip file, extra ...
- windows 安装 apache 服务以及添加 php 解析
apache 官方并没有提供 windows 的安装包,但是它们官网给出了第三方的链接,我们可以在那些第三方网站上找到适用于 windows 的二进制包. 我们点进去下载一个 64 位的, 下载完之后 ...
- java 注解详解
先引用一下百度百科的名词解析: 定义:注解(Annotation),也叫元数据.一种代码级别的说明.它是JDK1.5及以后版本引入的一个特性,与类.接口.枚举是在同一个层次.它可以声明在包.类.字段. ...
- [Java多线程]-Thread和Runable源码解析
多线程:(百度百科借一波定义) 多线程(英语:multithreading),是指从软件或者硬件上实现多个线程并发执行的技术.具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提 ...
- Java 开发岗面试知识点
本文作者在一年之内参加过多场面试,应聘岗位均为 Java 开发方向.在不断的面试中,分类总结了 Java 开发岗位面试中的一些知识点. 主要包括以下几个部分: Java 基础知识点 Java 常见集合 ...
- Lucene 查询分页技术
常用的Lucene查询代码如下所示,该代码的作用是将path路径下的所有索引信息返回 public String matchAll(String path) { try { Directory dir ...
- 【机器学习】K-邻近算法的python 实现
#!/usr/bin/python # -*- coding: utf-8 -*- from numpy import * import operator def createDataSet(): ' ...
- 百度搜索URL中的参数都是什么
最近,点石排名更新了一个新功能——站内搜索.其实理解起来也很简单,就是通过URL限定搜索结果为某个网站,从而参与点击(例如:https://www.baidu.com/s?wd=SEO&si= ...
- 【51nod】1238 最小公倍数之和 V3 杜教筛
[题意]给定n,求Σi=1~nΣj=1~n lcm(i,j),n<=10^10. [算法]杜教筛 [题解]就因为写了这个非常规写法,我折腾了3天…… $$ans=\sum_{i=1}^{n}\s ...