标准输入输出对象(4个IO对象)
cin>> 标准输出
cout<< 标准输入
cerr 输出警告和错误(standard error)
clog 输出程序运行时的一般信息
c++调试闪退问题解决(VS2010):
#include<stdlib.h>
system(“pause”); //添加到main()函数里
关于std::cout和std::endl
std::指出名字cout和endl是定义在std的命名空间(namespace)中的
如果每次都这么写,那么代码就会显得繁琐,如何避免呢?
using namespace std; //在使用前声明一下即可
" :: " 作用域运算符
std::endl的功能是换行
关于 class(类)
c++最初的设计焦点就是能够自然的使用像内置类型的类类型(class type)
标准的库头文件通常不使用后缀。编译器一般也不关心头文件名的形式,但有的IDE对此有特定要求
对于属于标准库的头文件,应使用 < >将其包围。若不属于标准库则使用双引号 " “,如:
#include //标准库
#inlcude"Sales item.h” //不属于标准库
VS2010添加头文件方法
【工程】----【配置属性】—【c/c++】—【常规】—【附加包含目录】—加入头文件的路径
test1
连续输入一组数,打印出连续输入的相同的数和次数
#include<iostream>
#include<stdlib.h>
using namespace std;
int main()
{
int currVal=0,val=0;
if(cin>>currVal) //将第一次输入的值作为当前值
{
int cnt=1; //设定计数器的值
while(cin>>val)
{
if(val==currVal) //判断输入是否与当前值相等
{
cnt++; //相等则次数+1
}
else
{
cout<<currVal<<" occurs"<<cnt<<" times."<<endl;
currVal= val;//出现新值,更新当前值
cnt=1;//更新计数器的值
}
}
cout<<currVal<<" occurs"<<cnt<<" times"<<endl;
}
system("pause");
return 0;
}
if的判断
if(cin>>total) //判断是否有输入
if(totalcurr) //判断两值是否相等
上面两种做法都是正确的,但是不能在if()里面输入值的同时做判断,如:
if(cin>>totalcurr) //便会报错
常见术语
参数(实参,argument)向函数传递的值
程序块(block)花括号包围的语句序列
缓冲区(buffer)保存数据的存储区域。通常,读cin会刷新cout;程序非正常终止也会刷新cout。
Cerr 一个ostream对象,关联到标准错误
注释(comment)被编译器忽略的程序文本
iostream 头文件,提供面向流的输入输出的标准库类型
istream 提供面向流的输入的库类型
ostream 标准库类型,提供面向流的输出
源文件(source file)包含C++程序的文件
:: 作用域运算符
<= 小于或等于;>= 大于或等于(注意<和=的书写顺序)
C++是一种静态数据类型语言,编译时就会类型检查,所以编译器必须知道程序中的每一个变量对应的数据类型
可寻址的最小内存块称为“字节(byte)”,存储的基本单元称为“字(Word)”,通常它由几个字节组成。1byte=8bits(位)
数据类型的意义
为了赋予内存某个地址的明确含义,必须首先知道存储在该地址的数据类型。类型决定数据所占的比特数以及如何解释这些比特的内容。
unsigned(无符号类型)中所有bit都用来存储值
如何选择类型
1.明确数值不为负时,选用无符号类型
2.使用int执行整数运算。若数值超过int的表示范围,则使用long long
3.算术表达式不要使用char和bool
4.执行浮点数运算使用double,因为float通常进度不够而且双精度浮点数和单精度浮点数的计算代价差不多,有些机器甚至运算double比float还要快。
类型转换
bool b=42; //b为真
int i = b; //i=1
i = 3.14; //i=3
double pi = i; //pi=3.0
unsigned char c = -1; //假设char占8bit,c的值为255
signed char c2 = 256; //假设char占8bit,c2的值是未定义的
当赋给无符号类型一个超出表示范围的值时,结果是初始值对无符号类型表示数值总数取模后的余数
赋给带符号位的值超过范围时,结果是未定义
程序应尽量避免依赖于实现环境的行为,如果我们把int的尺寸看做是确定不变的数值,那么这样的程序就是不可移植的
字面值常量
'a' //字符字面值,单引号括起来的一个字符称为char型字面值
"Hello world!" //字符串字面值,双引号括起来的零个或多个
转义符
\r 回车符 \n 换行符 横向制表符 \t 纵向制表符 \v
也有泛化的转义字符,其形式是:
\x 后紧跟1个或多个十六进制数字
\ 后至多跟3个二进制数字
指定字面值的类型
L'a' //宽字符型字面值,类型是wchar_t
u8'hi!' //utf-8字符串字面型
42ULL //无符号整型字面值,类型是unsigned long long
1E-3F //单精度浮点型字面值
3.14159L //扩展精度浮点型字符
/*前缀*/
u //unicode 16字符 char16_t
U //unicode 32字符 char32_t
L //宽字符 wchar_t
u8 //UTF8 (仅用于字符串字面型常量)
/*后缀*/
u or U //unsigned 以下均是最小匹配类型
i or L //long
ii or LL //long long
f or F //float
l or L //long double