控制台(console)是电脑的最基本交互接口,通常包括键盘(keyboard)和屏幕(screen)。键盘通常为标准输入设备,而 屏幕为标准输出设备。

在C++的iostream函数库中,一个程序的标准输入输出操作依靠两种数据流:cin 给输入使用和cout给输出使用。另外,cerr和clog也已经被实现――它们是两种特殊设计的数据流专门用来显示出错信息。它们可以被重新定向到标准输出设备或到一个日志文件(log file)。

因此cout (标准输出流)通常被定向到屏幕,而cin (标准输入流)通常被定向到键盘。

通过控制这两种数据流,你可以在程序中与用户交互,因为你可以在屏幕上显示输出并从键盘接收用户的输入。

输出Output (cout)

输出流cout与重载(overloaded)运算符<<一起使用:

cout << "Output sentence"; // 打印Output sentence到屏幕上
cout << 120; // 打印数字 120 到屏幕上
cout << x; // 打印变量 x 的值到屏幕上

运算符<<又叫插入运算符(insertion operator) 因为它将后面所跟的数据插入到它前面的数据流中。在以上的例子中,字符串常量Output sentence,数字常量120和变量x先后被插入输出流cout中。注意第一句中字符串常量是被双引号引起来的。每当我们使用字符串常量的时候,必须用引号把字符串引起来,以便将它和变量名明显的区分开来。例如,下面两个语句是不同的:

cout << "Hello"; // 打印字符串Hello到屏幕上
cout << Hello; // 把变量Hello存储的内容打印到屏幕上

插入运算符insertion operator (<<)可以在同一语句中被多次使用:

cout << "Hello, " << "I am " << "a C++ sentence";

上面这一行语句将会打印 Hello, I am a C++ sentence 到屏幕上。插入运算符(<<) 的重复使用在我们想要打印变量和内容的组合内容或多个变量时有所体现:

cout << "Hello, I am " << age << " years old and my zipcode is " << zipcode;

如果我们假设变量age的值为24,变量zipcode的值为90064,以上句子的输出将为: Hello, I am 24 years old and my zipcode is 90064

必须注意,除非我们明确指定,cout并不会自动在其输出内容的末尾加换行符,因此下面的语句:

cout << "This is a sentence.";
cout << "This is another sentence.";

将会有如下内容输出到屏幕:

This is a sentence.This is another sentence.

虽然我们分别调用了两次cout,两个句子还是被输出在同一行。所以,为了在输出中换行,我们必须插入一个换行符来明确表达这一要求。在C++中换行符可以写作\n:

cout << "First sentence.\n ";
cout << "Second sentence.\nThird sentence.";
将会产生如下输出:First sentence.
Second sentence.
Third sentence.

另外,你也可以用操作符endl来换行,例如:

cout << "First sentence." << endl;
cout << "Second sentence." << endl;

将会输出:

First sentence.
Second sentence.

当操作符endl被用在buffered streams中时有一点特殊:它们被flushed。不过cout 默认为unbuffered,所以不会被影响。 你可以暂时不管这一点。

你可以使用\n或endl来指定cout输出换行,请注意前面所讲的两者的不同用法。

输入Input (cin)

C++中的标准输入是通过在cin数据流上重载运算符extraction (>>) 来实现的。它后面必须跟一个变量以便存储读入的数据。例如:

int age;
cin >> age;

声明一个整型变量age然后等待用户从键盘输入到cin并将输入值存储在这个变量中。

cin 只能在键盘输入回车键(RETURN)后才能处理前面输入的内容。因此即使你只要求输入一个单独的字符,在用户按下回车键(RETURN)之前cin将不会处理用户的输入的字符。

在使用cin输入的时候必须考虑后面的变量类型。如果你要求输入一个整数,extraction (>>) 后面必须跟一个整型变量,如果要求一个字符,后面必须跟一个字符型变量,如果要求一个字符串,后面必须跟一个字符串型变量。

// i/o example
#include <iostream.h>
int main ()
{
int i;
cout << "Please enter an integer value: ";
cin >> i;
cout << "The value you entered is " << i;
cout << " and its double is " << i*2 << ".\n";
return 0;
}
Please enter an integer value: 702
The value you entered is 702 and its double is 1404.

使用程序的用户可以使引起错误的原因之一,即使是在最简单的需要用cin做输入的程序中(就像我们上面看到的这个程序)。因为如果你要求输入一个整数数值,而用户输入了一个名字(一个字符串),其结果可能导致程序产生错误操作,因为它不是我们期望从用户处获得的数据。当你使用由cin 输入的数据的时候,你不得不假设程序的用户将会完全合作而不会在程序要求输入整数的时候输入他的名字。后面当我们看到怎样使用字符串的时候,我们将会同时看到一些解决这一类出错问题的办法。

你也可以利用cin 要求用户输入多个数据 :

cin >> a >> b;

等同于:

cin >> a;
cin >> b;

在以上两种情况下用户都必须输入两个数据,一个给变量a,一个给变量b。输入时两个变量之间可以以任何有效的空白符号间隔,包括空格,跳跃符tab或换行。

cin和字符串

我们可以像读取基本类型数据一样,使用cin和>>操作符来读取字符串,例如:

cin >> mystring;

但是,cin >> 只能读取一个单词,一旦碰到任何空格,读取操作就会停止。在很多时候这并不是我们想要的操作,比如我们希望用户输入一个英文句子,那么这种方法就无法读取完整的句子,因为一定会遇到空格。

要一次读取一整行输入,需要使用C++的函数 getline,相对于是用cin,我们更建议使用getline来读取用户输入。

例如:

// 读取字符串例子#include <iostream>#include <string>using namespace std;int main (){  string mystr;  cout << "What's your name? ";  getline (cin, mystr);  cout << "Hello " << mystr << ".\n";  cout << "What is your favorite color? ";  getline (cin, mystr);  cout << "I like " << mystr << " too!\n";  return 0;} What's your name? AquaHello Aqua.What is your favorite color? blueI like blue too!

你可能注意到在上面的例子中,两次调用 getline 函数我们都是用了同一个字符串变量(mystr)。在第二次调用的时候,程序会自动用第二次输入的内容取代以前的内容。

字符串流 (stringstream)

标准头文件 <sstream> 定义了一个叫做 stringstream 的类,使用这个类可以对基于字符串的对象进行像流(stream)一样的操作。这样,我们可以对字符串进行抽取和插入操作,这对将字符串与数值互相转换非常有用。例如,如果我们想将一个字符串转换为一个整数,可以这样写:

string mystr ("1204");int myint;stringstream(mystr) >> myint;

这个例子中先定义了一个字符串类型的对象mystr,初始值为"1204",又定义了一个整数变量myint。然后我们使用 stringstream 类的构造函数定义了这个类的对象,并以字符串变量mystr为参数。因为我们可以像使用流一样使用stringstream 的对象,所以我们可以像使用cin那样使用操作符 >> 后面跟一个整数变量来进行提取整数数据。这段代码执行之后变量 myint 存储的是数值 1204 。

// 字符串流的使用示例#include <iostream>#include <string>#include <sstream>using namespace std;int main (){  string mystr;  float price=0;  int quantity=0;  cout << "Enter price: ";  getline (cin,mystr);  stringstream(mystr) >> price;  cout << "Enter quantity: ";  getline (cin,mystr);  stringstream(mystr) >> quantity;  cout << "Total price: " << price*quantity << endl;  return 0;} Enter price: 22.25Enter quantity: 7Total price: 155.75

在这个例子中,我们要求用户输入数值,但不同于从标准输入中直接读取数值,我们使用函数getline从标注输入流cin中读取字符串对象(mystr),然后再从这个字符串对象中提取数值price和quantity。

通过使用这种方法,我们可以对用户的输入有更多的控制,因为它将用户输入与对输入的解释分离,只要求用户输入整行的内容,然后再对用户输入的内容进行检验操作。这种做法在用户输入比较集中的程序中是非常推荐使用的。

C++基础知识—— 基本输入输出相关推荐

  1. 汇编基础知识之输入输出

    最近在学习汇编程序,但输入输出是我遇到的第一个难题,这里就简单讲诉一些汇编的基本输出输出字符串.字符.输出数字等知识,仅供大家学习.这只是一些基础知识,汇编高手亦可以温习一些基础的输入输出知识. 一. ...

  2. S7-200SMART PLC基础知识汇总

    S7-200SMART PLC基础知识汇总 输入输出: I:数字量输入(DI) Q:数字量输出(DO) AI:模拟量输入 AQ:模拟量输出 内部数据存储区: V:变量存储区,可以按位.字节.字或双字来 ...

  3. Java学习——基础知识之运算符和输入输出

    知识是珍宝,但实践是得到它的钥匙.--托马斯·富勒 Java基础知识之运算符和输入输出 一.运算符 1.算术运算符:包括:+,-,*,/(整数运算取整),%(取余),++(递增1),–等 2.赋值运算 ...

  4. java逻辑符号怎么打_Java基础知识之运算符和输入输出

    知识是珍宝,但实践是得到它的钥匙.--托马斯·富勒 Java基础知识之运算符和输入输出 一.运算符1.算术运算符:包括:+,-,*,/(整数运算取整),%(取余),++(递增1),–等 2.赋值运算符 ...

  5. Windows_Program_Via_C_Translate_Win32编程的背景知识/基础知识_包括基本输入输出机制介绍...

    Some Basic Background Story of The Win32 APIs Win32 API背景故事/背景知识 The Win32 application programming i ...

  6. c语言基础知识pdf下载,C语言主基础知识.pdf

    C语言主基础知识 泰山学院CSDN 俱乐部 C 语言主要基础内容 1.预处理命令 预处理的概念:在编译之前进行的处理.预处理命令以符号"#"开头. 2 .关于#include 在编 ...

  7. 阿里深资架构师整理的Java 基础知识小抄 赶紧收藏

    本篇算是 Java 的基础知识小抄吧,之所以说小抄是因为觉得涵盖不是很细很全,但是基本的内容都有,当然后头还会继续完善,只是不会再用笔记录了!按照现在的习惯,先附上一张思维导图: 1. 安装与环境配置 ...

  8. Linux操作系统文件系统基础知识详解

    标签:基础知识操作系统根目录Linux程序 一 .Linux文件结构 文件结构是文件存放在磁盘等存贮设备上的组织方法.主要体现在对文件和目录的组织上. 目录提供了管理文件的一个方便而有效的途径. Li ...

  9. python入门004~创建属于自己的第一个python3项目~基础知识的讲解

    上一节带领大家成功的安装了pthon3,并且在开发者工具pycharm里配置了python,这一节就开始带领大家学习python3的基础知识了. 如果你还没有安装python3,也没有安装开发者工具p ...

最新文章

  1. 新手探索NLP(六)——全文检索
  2. java string blog_StringUtils方法全集
  3. MySQL数据类型简介
  4. 谈一谈 MPU6050 姿态融合(转)
  5. 荐书:《PostgreSQL指南:内幕探索》| 留言送书
  6. 换个角度思考勒索攻击事件
  7. 持续集成工具集之一 Jenkins简介
  8. tensorflow之conv2d
  9. android投影到创维电视,创维Miracast,手机怎么投屏到创维电视,
  10. clion连接mysql,使用 CLion 调试 mysql 源码
  11. Windows Me光盘启动安装过程
  12. ITIL与DevOps
  13. Win10如何开启IIS服务以及如何打开IIS管理器
  14. java添加word书签,Jacob操作Word书签
  15. 软件删不掉要计算机管理,控制面板卸载不了程序,小编教你如何处理控制面板中卸载不掉的软件...
  16. 关了资源管理器电脑白屏解决办法
  17. lotus - 深入理解时空证明的 golang 实现部分(PoSt)
  18. 情侣相册网站源码php,520情人节情侣恋爱爱情告白相册甜蜜回忆录_情侣表白电子邀请函...
  19. 波特率和数据传输速率的关系
  20. 虚拟化技术 — 虚拟机计算

热门文章

  1. Unity将当前场景渲染到图片上并导出图片(本地/服务器)
  2. 自用大智慧策略高端版本
  3. JAVA视频资料百度网盘分享
  4. UEFI Application
  5. Android Studio 基础控件飘红 处理办法
  6. Java中4大基本加密算法解析
  7. cuda的安装,及pytorch调用GPU步骤
  8. 11 编程指南_流数据
  9. 基于云的产品上线部署qqfarm
  10. 【思特奇杯】编程之星初赛