天天看点

《Visual C++ 开发从入门到精通》——2.4 输入/输出基础

本节书摘来自异步社区出版社《visual c++ 开发从入门到精通》一书中的第2章,第2.4节,作者: 王东华 , 李樱,更多章节内容可以访问云栖社区“异步社区”公众号查看。

知识点讲解:光盘视频ppt讲解(知识点)第2章输入输出基础.mp4

c++并没有直接定义进行输入或输出(i/o)的任何语句,而是由标准库(standard library)提供,i/o库为程序员提供了大量的工具。然而对于许多应用来说(包括本书的例子),编程者只需要了解一些基本的概念和操作即可。本书中的大多数例子都使用了处理格式化输入和输出的iostream库。iostream库的基础是两种命名为istream和ostream的类型,分别表示输入流和输出流。流是指要从某种i/o设备上读入或写出的字符序列。术语“流”试图说明字符是随着时间顺序生成或消耗的。本节将简要讲解c++实现输入和输出的基本知识。

标准库定义了4个i/o对象。处理输入时使用命名为cin(读作see-in)的istream类型对象。这个对象也叫做标准输入(standard input)。处理输出时使用命名为cout(读作see-out)的ostream类型对象,这个对象也称为标准输出(standard output)。标准库还定义了另外两个ostream对象,分别命名为cerr和clog(分别读作“see-err”和“see-log”)。cerr对象又叫做  标准错误(standard error),通常用来输出警告和错误信息给程序的使用者。而clog对象用于产生程序执行的一般信息。

在一般情况下,系统将这些对象与执行程序的窗口联系起来。这样,当我们从cin读入时,数据从执行程序的窗口读入,当写到cout、cerr或clog时,输出至同一窗口。运行程序时,大部分操作系统都提供了重定向输入或输出流的方法。利用重定向可以将这些流与所选择的文件联系起来。

到目前为止,我们已经明白如何编译与执行简单的程序了,虽然那个程序什么也不做。接下来先看一看应该如何实现把两数相加的处理代码。我们可以使用i/o库来扩充main程序,实现输出用户给出的两个数的和的功能,具体代码如下。

std::cout << "输入两个数字:";

std::cout &lt;&lt; std::endl;<code>`</code>

endl是一个特殊值,称为操纵符(manipulator),将它写入输出流时,具有输出换行的效果,并刷新与设备相关联的缓冲区(buffer)。通过刷新缓冲区,保证用户立即看到写入到流中的输出。

图像说明文字

注意:程序员经常在调试过程中插入输出语句,这些语句都应该刷新输出流。忘记刷新输出流可能会造成输出停留在缓冲区中,如果程序崩溃,将会导致程序错误推断崩溃位置。

2.使用标准库中的名字

细心的读者会注意到这个程序中使用的是std::cout和std::endl,而不是cout和endl。前缀std::表明cout和endl是定义在命名空间(namespace)std中的。命名空间使程序员可以避免与库中定义的名字相同引起的无意冲突。因为标准库定义的名字是定义在命名空间中,所以我们可以按自己的意图使用相同的名字。

标准库使用命名空间的副作用是,当我们使用标准库中的名字时,必须显式地表达出使用的是命名空间std下的名字。std::cout的写法使用了作用域操作符(scope operator,::操作符),表示使用的是定义在命名空间std中的cout。

3.读入流

在输出提示语后,将读入用户输入的数据。先定义两个名为v1和v2的变量来保存输入。

`

int v1, v2;`

将这些变量定义为int类型,int类型是一种代表整数值的内置类型。这些变量未初始化,表示没有赋给它们初始值。这些变量在首次使用时会读入一个值,因此可以没有初始值。下一条语句读取输入。

std::cin &gt;&gt; v1 &gt;&gt; v2;`

输入操作符(&gt;&gt;操作符)的行为与输出操作符相似,功能是接受一个istream对象作为其左操作数,接受一个对象作为其右操作数,它从istream操作数读取数据并保存到右操作数中。像输出操作符一样,输入操作符返回其左操作数作为结果。由于输入操作符返回其左操作数,我们可以将输入请求序列合并成单个语句。换句话说,这个输入操作等价于下面的代码。

std::cout &lt;&lt; "它们的和是" &lt;&lt; v1 &lt;&lt; " and " &lt;&lt; v2

上述代码虽然比输出提示语的语句长,但是在概念上没什么区别,功能是将每个操作数输出到标准输出。有趣的是操作数并不都是同一类型的值,有些操作数是字符串字面值。例如,下面的字符串。

<code>"它们的和是"</code>

其他是不同的int值,如v1、v2以及对算术表达式v1 + v2求值的结果。iostream库定义了接受全部内置类型的输入/输出操作符版本。

注意:在编写c++程序时,大部分出现空格符的地方,可用换行符代替。这条规则的一个例外是字符串字面值中的空格符不能用换行符代替。另一个例外是换行符不允许出现在预处理指示中。

继续阅读