在 C++ 中,我们通过调用输入输出流库中的流对象 cin 和 cout 来实现输入和输出。

#include <iostream>

using namespace std;

int main()
{
int a = 0;
float b = 0;
char c = 0; cin >> a >> b >> c;
cout << a << '\t' << b << '\t' << c << '\t' << endl;
return 0;
}
56       Enter
5.36 Enter
a Enter
56 5.36 a

在用 cin 进行输入时,我们不用指定具体的数据类型,系统会根据变量的类型从输入流中提取相应长度的字节。同样,用 cout 进行输出时,系统也会自动判别输出数据的类型使输出的数据按相应的类型输出。

通过 cin 读入数据时,会自动跳过输入流中的空格、tab 键和换行字符。当遇到无效字符或者文件结束符时,输入 cin 就会处于出错状态,我们可以通过判断 cin 的值来判断流对象是否处于正常状态和提取操作是否成功。

另外,我们还可以使用控制符来设置输入输出的格式。

#include <iostream>
#include <iomanip> using namespace std; int main()
{
int a = 256;
float b = 3.1415926525; cout << b << endl;
cout << setprecision(9) << b << endl; // 设置精度
cout << setiosflags(ios::fixed) << setprecision(2) << b << endl; // 设置小数点位数 cout << endl << a << endl;
cout << hex << a << endl; // 十六进制输出
cout << dec << setfill('*') << setw(5) << a << endl; // 设置域宽和填充
cout << setiosflags(ios::showpos) << a << endl; // 显示符号
cout << resetiosflags(ios::showpos) << a << endl; // 取消显示符号 return 0;
}
3.14159
3.14159274
3.24 256
100
**256
+256
256

也可以使用 cout 的成员函数来设置输入输出的格式。

#include <iostream>

using namespace std;

int main()
{
int a = 256;
float b = 3.1415926525; cout << b << endl;
cout.precision(9); // 设置精度
cout << b << endl;
cout.precision(2);
cout.setf(ios::fixed); // 设置固定小数点位数
cout << b << endl; cout << endl << a << endl;
cout.setf(ios::hex, ios::basefield);
cout << a << endl;
cout.fill('*'); // 设置填充
cout.width(5); // 设置域宽
cout << a << endl;
cout.setf(ios::showpos); // 显示符号
cout << a << endl;
cout.unsetf(ios::showpos); // 取消显示符号
cout << a << endl; return 0;
}
3.14159
3.14159274
3.24 256
100
**256
+256
256

为了与 C 语言兼容,C++ 保留了 C 中的 scanf 和 printf 函数进行输入输出,以及 getchar 和 putchar 函数进行单个字符的输入输出。

此外,我们还可以用输入输出流对象的一些成员函数来实现输入和输出。

  • cout.put() 输出单个字符,可以连续输出
  • cin.get() 读入一个字符(包括空白字符),返回读入成功的字符,如遇到文件结束符,返回 EOF
  • cin.get(ch) 读入一个字符并赋值给变量 ch,成功读入则返回真
  • cin.get (字符数组或指针,字符个数 n,终止字符) 读入 n-1 个字符,如遇到终止字符则提前结束
  • cin.getline (字符数组或指针,字符个数 n,终止字符) 与上面的 cin.get 类似,但是遇到终止字符时,字符指针会移到该终止字符后面,而 cin.get 则会停留在原位置
#include <iostream>

using namespace std;

int main()
{
char ch[20] = {0}; cin >> ch[0]; // 读入 1
cout.put(ch[0]);
cout << endl; ch[1] = cin.get(); // 读入 2
cout.put(ch[1]);
cout << endl; cin.get(ch[2]); // 读入 3
cout.put(ch[2]);
cout << endl; cin.get(ch, 20, '/'); // 读入 123 之后的第一个回车以及 'hello, seniusen! h' 共计 19 个字符
cout << ch << endl; cin.get(ch, 20, '/'); // 读入'ello, seniusen!' 共计 15 个字符,遇到终止字符 ‘/’ 停止
cout << ch << endl; cin.getline(ch, 20, '/'); // 当前字符指针还停留在字符 ‘/’ 处,直接停止读入,字符指针后移一位指向空格
cout << ch << endl; cin.getline(ch, 20, '/'); // 读入' hello, seniusen!' 共计 17 个字符,遇到终止字符 ‘/’ 停止
cout << ch << endl; return 0;
}
123    Enter
1
2
3
hello, seniusen! hello, seniusen!/ hello, seniusen!/ Enter hello, seniusen! h
ello, seniusen! hello, seniusen!

一些其他的成员函数:

  • cin.eof() 如果到达文件末尾(遇文件终止符)返回真,否则返回假
  • cin.peek() 返回当前指针指向的字符,但只是观测,指针仍然停留在当前位置
  • cin.putback(ch) 将字符 ch 返回到输入流,插入到当前指针位置
  • cin.ignore (n, 终止字符) 跳过输入流中 n 个字符,若遇到终止符提前结束,此时指向终止字符后面一个位置

获取更多精彩,请关注「seniusen」!

C++ 学习笔记之——输入和输出的更多相关文章

  1. C++学习笔记之输入、输出和文件

    一.流的概念 数据从内存的一个地址移动到另一个地址称为数据流动——流操作 流操作是通过缓冲区(buffer)机制实现的. 缓冲区:内存的一块区域——用作文件与内存交换数据. 数据从文件中读出:文件 → ...

  2. Java学习笔记:输入、输出数据

    相关内容: 输出数据: print println printf 输入数据: Scanner 首发时间:2018-03-16 16:30 输出数据: JAVA中在屏幕中打印数据可以使用: System ...

  3. tensorflow学习笔记——多线程输入数据处理框架

    之前我们学习使用TensorFlow对图像数据进行预处理的方法.虽然使用这些图像数据预处理的方法可以减少无关因素对图像识别模型效果的影响,但这些复杂的预处理过程也会减慢整个训练过程.为了避免图像预处理 ...

  4. stm32寄存器版学习笔记06 输入捕获(ETR脉冲计数)

    STM32外部脉冲ETR引脚:TIM1-->PA12;TIMER2-->PA0:TIMER3-->PD2;TIMER4-->PE0… 1.TIM2 PA0计数 配置步骤 ①开启 ...

  5. C++基础学习3:输入和输出(cin和cout)

    在C语言中,通常会在采用格式化输入输出函数printf和scanf用于输入或输出数据或信息.在C++语言中,C语言的这一套输入输出库我们仍能使用,但是C++语言又自定义了一套新的.更容易使用的输入输出 ...

  6. C++学习笔记10_输入输出流.文件读写

    //从键盘输入到程序,叫标准input:从程序输出到显示器,叫标准output:一并叫标准I/O //文件的输入和输出,叫文件I/O cout<<"hellow word&quo ...

  7. Python基础学习笔记---5.输入\输出 I\O文件操作目录

    在很多时候,你会想要让你的程序与用户(可能是你自己)交互.你会从用户那里得到输入,然后打印一些结果.我们可以分别使用 raw_input 和 print 语句来完成这些功能.对于输出,你也可以使用多种 ...

  8. C学习笔记-字符串的格式化输出和输入

    存储方式 字符串是内存中一段连续的char空间,以'\0'结尾 字符串就是0结尾的连续char的内存 '\0' <=> 0 <=> null printf函数,putchar函 ...

  9. PHP学习笔记:输入一句话,实现单词倒序输出

    约定:句子以空格为词语分割符号,以句号为结束符号. 实现思路: 用函数explode(separator,string,limit)对字符串进行分割,再对得到的数据最后一个成员分割切掉符号.用一个新的 ...

随机推荐

  1. Python 学习笔记(三)数字

    Python 数字 int 整型  是正或负整数  2 long 长整型  整数最后是一个大写或小写的L   2L float  浮点型 由整数部分和小数部分组成   2.0 complex 复数 小 ...

  2. IPv4和IPv6的兼容问题

    一网络拓扑 Ipv6网络1 路由器A IPv4网络 路由器B IPv6网络2 二知识补充 [注]双协议栈主机(路由器A.B)通过域名解析器区分传过来的是IPv4还是IPv6 三处理技术 双协议栈 Ip ...

  3. 【转】opatch学习

    [转自:https://yq.aliyun.com/articles/28007,仅作学习用途] Opatch 是oracle公司开发的安装,卸载,检测patch冲突的工具,管理oracle所有已经安 ...

  4. Python的核心数据类型

    ​ Python的核心数据类型有:数字,字符串,列表,字典,元组,文件等. 数字 ​ 数字类型有:整形int,浮点型float,复数complex,布尔型bool. 整形 ​ 整型数是不带有小数部分的 ...

  5. 【shell脚本学习-3】

    part-1 #!/bin/bash:<<FTP#test [ 1 -eq 2] #条件测试x="abc" #不允许有空格y="abc" [ &qu ...

  6. YII2.0学习二 安装adminlte 后台模板

    控制台切换到安装目录wwwroot/shanghai/ 修改一下composer镜像地址:composer 使用中国镜像 运行 composer require dmstr/yii2-adminlte ...

  7. hive 学习系列之七 hive 常用数据清洗函数

    1,case when 的利用,清洗诸如评分等的内容,用例如下. case when new.comment_grade = '五星商户' then 50 when new.comment_grade ...

  8. django模型的字段查询

    条件运算符 exact: 查判等 list=BookInfo.objects.filter(id__exact=1) 可简写为: list=BookInfo.objects.filter(id=1) ...

  9. python三大神器之生成器

    生成器Generator: 本质:迭代器(所以自带了__iter__方法和__next__方法,不需要我们去实现) 特点:惰性运算,开发者自定义 在python中有三种方法来获取生成器: 1.通过生成 ...

  10. 网站如何防止sql注入攻击的解决办法

    首先我们来了解下什么是SQL注入,SQL注入简单来讲就是将一些非法参数插入到网站数据库中去,执行一些sql命令,比如查询数据库的账号密码,数据库的版本,数据库服务器的IP等等的一些操作,sql注入是目 ...