在 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. JavaEE权限管理系统的搭建(五)--------RBAC权限管理中的权限菜单的显示

    上一小节实现了登录的实现,本小节实现登录后根据用户名查询当前用户的角色所关联的所有权限,然后进行菜单的显示.登录成功后,如下图所示,管理设置是一级菜单,管理员列表,角色管理,权限管理是二级菜单. 先来 ...

  2. UGUI防止点击穿透

    if (!IsPointerOverGameObject(Input.mousePosition)) { } public static bool IsPointerOverGameObject(Ve ...

  3. VisualSVN Server更改SVN版本库存放路径的方法

    来源:http://blog.csdn.net/tcjy1000/article/details/42023849 最近也玩起了SVN软件版本管理,在本机上安装了VisualSVN Server+To ...

  4. data-ng-show 指令

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...

  5. JavaScript监控输入框字数变化,超出限制则禁止输入

    JavaScript监控输入框字数变化,超出则禁止输入 不废话,给你看看效果: 1.无输入状态: 2.输入三个字符: 3.超出5个后报错: 现在粘出代码,首先是html代码: <body> ...

  6. awk分隔符

    最近需要检测日志,shell中用到了awk,因为分割条件不止一个,并且包括了中括号.在此记录一下关于多分隔符并且包含中括号的情况 awk -F'[=,]|[][]+' '{print $6}'

  7. HDU 6354--Everything Has Changed(判断两圆关系+弧长计算)

    题目 题意:首先给定一个以原点为圆心,R为半径的圆,之后在给m个圆,这些圆可能会和原来的圆有所交集,计算开始的圆剩余区域的周长,不包括内部周长. 首先判定两圆关系,如果内含,直接加上圆的周长,如果相交 ...

  8. 【TOJ 4475】The Coolest Sub-matrix(对角线前缀和)

    描述 Given an N*N matrix, find the coolest square sub-matrix.We define the cool value of the square ma ...

  9. Struts2进阶学习3

    Struts2进阶学习3 OGNL表达式与Struts2的整合 核心配置文件与页面 <?xml version="1.0" encoding="UTF-8" ...

  10. java中的基本算法

    整理一下常用的又基础的算法.由于平时的项目比较简单,很少用到算法,但工作不只是眼前的苟且,还有诗和远方. 1.链表 链表用来存储数据,由一系列的结点组成.这些结点的物理地址不一定是连续的,即可能连续, ...