在 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. 【OJ-UVa227】

    耗时一周.哭. 本题重在输入输出.所以对英文题目的理解非常重要.看清楚题目,省时省力. 题目要点: 1.开始有5×5的数据,每行仅有5个字符.注意:样例输入中的尾部空格是无法复制的(UVa官网上),其 ...

  2. o'Reill的SVG精髓(第二版)学习笔记——第四章

    第四章:基本形状 4.1线段 SVG可以使用<line>元素画出一条直线段.使用时只需要指定线段起止点的x和y坐标即可.指定坐标时可以不带单位,此时会使用用户坐标,也可以带上单位,如em. ...

  3. vue进阶语法及生命周期函数

    1.calss和style绑定 操作元素的 class 列表和内联样式style是数据绑定的一个常见需求,它两都是属性,所以可以通过v-bind来绑定 1.1绑定HTML class 可以给v-bin ...

  4. select 获取选中option的值方法,选中option方法

    options=$("#Select option:selected"); options.attr('name');options.val(); options.text(); ...

  5. LINUX日志的错误等级

    LINUX日志的错误等级 - CSDN博客 https://blog.csdn.net/solmyr_biti/article/details/50634533讯息等级 系统将讯息分为七个主要的等级, ...

  6. c#项目总结

    写了将近10年代码了,最后休息,回想了下,感觉什么都没有. 所以打算写一些总结性的文章,先写几个项目,用于c#各个方向的封装使用 最后汇总成一个完善的解决方案.所有项目都在一个解决方案FastAIFr ...

  7. 数组reduce方法以及高级技巧

    基本概念: reduce()方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终为一个值. reduce为数组中的每一个元素依次执行回调函数.不包括数组中被删除或从未赋值的元素,接受两 ...

  8. luogu p2615神奇的幻方题解

    目录 题目部分 讲解部分 代码实现 题目部分 题目来源:洛谷p2615 题目描述 幻方是一种很神奇的 N*N矩阵:它由数字 1,2,3,⋯⋯,N×N 构成,且每行.每列及两条对角线上的数字之和都相同. ...

  9. 只包含因子2 3 5的数(51NOD 1010)

    K的因子中只包含2 3 5.满足条件的前10个数是:2,3,4,5,6,8,9,10,12,15. 所有这样的K组成了一个序列S,现在给出一个数n,求S中 >= 给定数的最小的数. 例如:n = ...

  10. LeetCode-环形链表II

    LeetCode-环形链表II 为找到入口点可以用以下方法 使用快慢指针法直到两个指针相遇 头节点处创建一个新的指针,并且向前移动,两个指针相遇处创建一个新的指针,并且向前移动,直到两个指针相遇为入口 ...