基本概念
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++中有两种注释。
单行注释:在需要注释的一行内容前加上双斜杠(//)
界定符对注释(多行注释):在需要注释内容的最前面记上/*,后面加上*/。
编译器会自动忽略//后面的内容和/*与*/之间的内容。
界定符对注释不能嵌套。编译器会自动匹配遇到的第一个/*和遇到的第一个*/。
单行注释内的任何内容都会被忽略,包括/**/