C++启蒙之输入/输出
当前位置:以往代写 > C/C++ 教程 >C++启蒙之输入/输出
2019-06-13

C++启蒙之输入/输出

C++启蒙之输入/输出

副标题#e#

C++没有直接界说任何用于执行输入或输出(IO)的语句。作为取代,IO是通过尺度类库(standard library)提供的。IO类库提供了一个遍及的东西荟萃。可是,出于某些目标(包罗本文中的例子),你大概需要相识一些根基的观念和操纵。

本文中的例子利用了iostream类库,它处理惩罚名目化输入和输出。Iostream的基本是两个范例istream和ostream,它们别离暗示输入和输出流。流(stream)是筹备读取或写入某个IO设备或其它设备的字符串。"流"这个术语体现跟着时间的推移,生成了字符或消除了字符。

1、尺度的输入和输出工具

该类库界说了四个IO工具。为了处理惩罚输入,我们利用了istream范例的cin工具,它是尺度的输入。输出则利用ostream的cout工具,它凡是被称为尺度的输出。这个类库还界说了其它的两个ostream工具,别离是cerr和clog。Cerr工具是尺度的错误,典范环境下用于给措施的用户生成告诫或错误动静。Clog工具用于生成措施的执行环境信息。

凡是,系统把个中的每个工具都与措施执行的窗体相关联。因此,当我们从cin中读取的时候,数据来自措施执行的窗体,当我们写入cout、cerr、clog的时候,输出也写入沟通的窗体。大大都操纵系统都给了我们重定向输入或输出流的要领。利用重定向可以把这些流与我们选定的文件关联起来。

2、利用IO类库的措施

我们已经知道了如何编译和执行简朴的措施了,尽量这个措施没有任何成果。在整个问题中,有几个记录指向同一个ISBN。我们必需把这些记录归并成总数,这意味着我们必需知道如何添加销售的图书数量。

为了看到如何办理这些问题,我们先看一看两个数字如何相加。利用IO类库,我们可以扩展已有的main措施,让用户输入两个数字,然后打印出两个数字的和:


#p#副标题#e# #include <iostream>
int main()
{
std::cout << "Enter two numbers:" << std::endl;
int v1, v2;
std::cin >> v1 >> v2;
std::cout << "The sum of " << v1 << " and " << v2
<< " is " << v1 + v2 << std::endl;
return 0;
}

这个措施先在用户的屏幕上输出:

Enter two numbers:

接着期待用户输入信息。假如用户在另一行输入了:

3 7

那么措施就生成如下的输出信息:

The sum of 3 and 7 is 10

我们的措施的第一行是预处理惩罚措施指令(preprocessor directive):

#include <iostream>

它汇报编译器我们但愿利用iostream类库。尖括号内的名字是头文件(header)。每个利用了类库的措施都必需包括相关的头文件。#include指令必需写在同一行中–头文件的名字和#include必需呈此刻同一行。一般来说,#include指令应该呈此刻函数的外面。典范环境下,#include指令呈此刻措施文件的开头部门。

向流写入信息

Main主体中的第一个语句执行了一个表达式(expression)。在C++中一个表达式由一个或多个操纵数和(凡是)一个操纵符构成。这个语句中的表达式利用输出操纵符(<<操纵符)来打印尺度的输出提示:

std::cout << "Enter two numbers:" << std::endl;

这个语句两次利用了输入操纵符。输出操纵符的每个实例都有两个操纵数:左边的操纵数必需是一个ostream工具;右边的操纵数是一个要输出的值。该操纵符把右边的操纵数写入左边的操纵数ostream。

#p#副标题#e#

在C++中每个表达式生成一个功效,典范的功效是把操纵符应用在操纵数上生成值。在利用输出操纵符的环境下,其功效值是左边的操纵数。也就是说,输出操纵的返回值是输出流自身。

由于这个操纵符返回左边的操纵数,所以它答允我们把输出请求串在一起。输出提示的语句相当于:

(std::cout << "Enter two numbers:") << std::endl;

由于(std::cout << "Enter two numbers:")返回左边的操纵数,所以语句std::cout等同于:

std::cout << "Enter two numbers:";

std::cout << std::endl;

个中的endl是一个非凡值,称为操纵者(manipulator),当写入某个输出流的时候,它的结果是把新行写入到输出而且刷新与设备相关的缓冲器。通过刷新缓冲器,我们可以确保用户当即看到写入流的输出信息。

留意:

措施员在调试的进程中常常插入打印语句。这种语句一般也应该刷新流。假如健忘了这种操纵,在措施瓦解的时候,大概会引起输出信息逗留在缓冲器中,导致对措施在谁人位置瓦解的判定错误。

利用尺度类库中的名称

#p#分页标题#e#

细心的读者大概留意到这个措施利用了std::cout和std::endl而不是cout和endl。std::前缀表白cout和endl这两个名称是在std名字空间(namespace)中界说的。名字空间答允措施员制止在类库中界说的名称斗嘴。由于尺度类库中界说的名称都界说在名字空间中,我们可以利用沟通的名称。

类库利用名字空间的副浸染是当利用某个类库中的名称的时候,我们必需明晰地说明本身但愿从std名字空间中利用某个名称。std::cout利用了范畴操纵符(scope operator,::)来说明我们利用的cout名称界说在std名字空间中。

#p#副标题#e#

从流中读取数据

输入提示信息之后,我们下一步需要读取用户的输入信息。我们先界说了两个变量(variable)v1和v2来生存输入信息:

int v1, v2;

我们把这些变量界说为整型(int),它是表示整数值的内建范例。这些变量没有被初始化,意味着我们没有给它们赋予初始值。我们第一次利用这些变量的时候就是把值读入它们内里,因此不赋予初始值也是正确的。

下一个语句

std::cin >> v1 >> v2;

读取输入信息。输入操纵符(>>操纵)与输出操纵符的行为雷同。它左边的操纵数是流,右边的操纵数是工具。它从流操纵数中读取并把值存储到右边操纵数中。与输出操纵符雷同,输入操纵符返回左边的操纵数。由于这种操纵返回左边的操纵数,我们就可以把一组输入请求归并成为一个语句。换句话说,这个输入操纵等同于:

std::cin >> v1;

std::cin >> v2;

我们的输入操纵的结果是从尺度的输入中读取两个值,存储在v1和v2中。

完善措施

剩余的部门是输出功效:

std::cout << "The sum of " << v1 << " and " << v2

<< " is " << v1 + v2 << std::endl;

尽量这个语句比输出提示信息的语句长一些,可是它们本质上没有区别。它把每个操纵数都打印到尺度的输出中。个中有趣的是这些值的范例是差异的。有些操纵数是字符文本,譬喻

"The sum of "

而其它的一些是整型值,譬喻v1、v2和算术表达式的功效:

v1 + v2

iostream类库界说了两种输入和输出操纵符,它们可以或许接管所有的内建范例。

请留意:

编写C++措施的时候,在大大都环境下呈现空格的时候都可以用新行取代。这条法则的破例是字符串文本中的空格不能用新行取代。另一个破例是预处理惩罚措施指令中的空格也不答允替代。

已初始化和未初始化的变量

在C++中初始化是一个很重要的观念。初始化变量指在界说的时候给变量赋值。未初始化变量没有赋予初始值:

int val1 = 0; // 初始化了的

int val2; // 未初始化的

给变量赋予初始值一般都是正确的,可是不必然是须要的。当我们可以或许必定第一次利用变量的时候会给它赋予一个新值,就没有须要赋予初始值。

当我们界说变量的时候,我们必需给它赋予初始值,除非我们可以或许必定在变量利用之前这个值会被包围(重载)。假如不能担保变量被读取之前先复位,我们就应该初始化它:

操练3:

在尺度输出中打印出"Hello,World"。

操练4:

我们的措施利用内建的加操纵符(+)来生成两个数的和。编写一个措施利用乘操纵符(*)生成两个数字的积。

操练5:

我们把输出信息写在一个长的语句中了。从头编写这个措施,利用独立的语句输出每一个操纵数。

操练6:

表明下面的措施片断的成果:

std::cout << "The sum of " << v1;

<< " and " << v2;

<< " is " << v1 + v2

<< std::endl;

这段代码正当吗?假如正当,是为什么?假如不正当,又是为什么?

    关键字:

在线提交作业