有章法的学习c++(2)初识输入输出

基本概念

c++语言并未定义任何的输入输出语句,取而代之,它包含了一个全面的标准库(standard library)来提供io机制(以及其它很多设施)。


iostream库:

包含两个基础类型,istream和ostream,分别表示输入流和输出流。

一个流就是一个字符序列,表示随时间的推移,字符的顺序生成或消耗。

标准输入输出对象:

标准库定义了4个io对象,cin,cout,cerr和clog。

分别为标准输入、标准输出、标准错误,第四个没有名字。

无论是哪个io对象,系统都会将其与运行窗口关联起来。因此,cin会从窗口读取数据,cout,cerr,clog会将数据写到运行程序的窗口。

下面看一个使用io库的程序:

#include<iostream>
<span style="font-family: Arial, Helvetica, sans-serif;">using namespace std;</span>
<span style="font-family: Arial, Helvetica, sans-serif;">/*</span>
<span style="font-family:Arial, Helvetica, sans-serif;">读取两个数,求他们的和</span>
<span style="font-family: Arial, Helvetica, sans-serif;">*/</span>
int main(){
<span style="white-space:pre">	</span>//输出提示
	cout << "enter two numbers:" << endl;
<span style="white-space:pre">	</span>//定义并初始化两个数
	int value1 = 0,value2 = 0;
<span style="white-space:pre">	</span>//输入两个数
	cin >> value1 >> value2;
<span style="white-space:pre">	</span>//输出结果
	cout << "the sum of " << value1 << " and " << value2 << " is " << value1 + value2 << endl;
	return 0;
}


代码的解释:


程序第一行

#include<iostream>

这一行告诉了编译器我们要使用iostream库。

尖括号中的名字(本例中是iostream)指出一个头文件(header)。


程序第二行

using namespace std;

这一行确定了本程序使用的一个命名空间。

命名空间的作用是防止命名冲突。

此处先声明了命名空间,可以减少代码量,方便编码。

文章的后面专门介绍,现在先知道这个定义,有疑问后面也先放心里。

ps:以前上学的时候老师照搬讲义上的内容,哪有闲心一行一行的解释代码,大部分时候都是假设你已经会了,说的

东西啥都不懂。不懂就走神,走神更不懂。一学期过去了也能没弄清namespace(当然我自己的锅也很大)。


向流中写入数据

函数体第一行

cout << "enter two numbers:" << endl;

在c++中一个表达式产生一个计算结果。

一个表达式,由一个或多个运算对象和一个运算符组成。

而在这一行,这条语句中的表达式,使用了输出运算符(<<)在标准出输出上打印消息。

<<运算符接受两个运算对象:其中左侧对象必须是ostream对象,右侧对象是要打印的值。

此运算符把给定的值写入左侧的运算对象中去。

输出运算符的运算结果就是左侧运算对象。

我们的输出运算符使用量两次,分两次运算。

cout << "enter two numbers:"的结果就是 cout

cout << "enter two numbers:" << endl;第一次运算得到cout << endl;第二次运算得到cout。

cout << "enter two numbers:" << endl;

即(cout << "enter two numbers:") << endl;

也等价于cout << "enter two numbers:";cout << endl;

第一个输出运算符给用户打印一条消息,这个消息是字符串字面值常量(string literal)(字面值常量以后也会介绍到)。

第二个运算符打印endl,这是一个被称为操纵符(manipulator)的特殊值。写入endl的效果是结束当前行(即换行)和将与设备相关联的缓冲区(buffer)中的内容刷到设备中

从流中读取数据

函数体第二行

int value1 = 0,value2 = 0;

此处定义两个变量来保存要被输入的数据。

这两个变量被定义为int型,其中int型为内置类型(前面已经介绍)。

我们将这两个变量初始化为0。

初始化,就是在变量创建的时候同时为他赋值。

函数体第三行

cin >> value1 >> value2;

它读入输入数据。

输出运算符(>>),他接受一个istream作为左侧运算对象,接受一个对象作为右侧运算对象。

其运算规则与输出运算符类似。

函数体第四行
return 0;
前面已经说过,这里不详述。


函数的语句解释完了,我们来说一下命名空间

标准库中定义的名字都在命名空间std中。如cin,cout等。

当你使用标准库中的一个名字时,必须显式的说明,我要使用std空间中的某一名字。

例如:我想输出a。语句应为,std::cout << "a";其中::是作用于运算符。

在上面的程序中,我们使用命名空间的方式是在代码的第二行,声明了命名空间std,这样编译器就知道我们使用的变量是来自命名空间std的。

这样的好处是,比使用作用域运算符更加方便、简洁。


代码的编译运行结果如图:



关于注释

编译器会忽略掉注释的内容。但是代码的读者不会。

编码者可以使用注释对代码中的变量,算法等进行解释。

c++中有两种注释。

单行注释:在需要注释的一行内容前加上双斜杠(//)

界定符对注释(多行注释):在需要注释内容的最前面记上/*,后面加上*/。

编译器会自动忽略//后面的内容和/*与*/之间的内容。

界定符对注释不能嵌套。编译器会自动匹配遇到的第一个/*和遇到的第一个*/。

单行注释内的任何内容都会被忽略,包括/**/





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章