1.typedef
作用:重新定义类型名字。如下:
typedef int i_T;
i_T i=1;
该语句表示:int 类型此时被赋予了两个名字,一个是int,一个是i_T。
作用:使程序变得简单,可以提示很多隐藏细节。
2.结构体
结构体赋值比较麻烦,可以重载赋值运算符来解决这一问题。
3.auto
关键字auto自动给变量赋类型,如下:
auto i=0.1;// i自动被赋予double类型
auto i = 1 + 2; // 因为1+2都是int类型,所以i被自动赋予int类型。
但是要注意:这仅在创建时初始化变量时有效,在没有初始化值的情况下创建的变量不能使用此功能。
还有就是,auto关键字不能和参数一起使用,比如下列代码就是错误的:
int m(auto x,auto y){//代码错误,不能和参数一起使用
return x+y;
}
另外,c11有了尾随返回类型语法,代码如下:
auto add(int x, int y) -> int;//用了auto类型,但是返回值是一个int整型。
它等效于:
int add(int x, int y);
4.控制流程
exit(0);//离开程序
5.伪随机数生成程序
int prng(){
static int seed=456456;//这里的staitc非常重要,这保证了每次循环使用,或者调用使用随机数生成函数的到的数字随机
seed=465423*seed+2396403;
return seed % 32768;
}
注:这种随机数生成方法很不好,原因:每个数生成的概率应该是可控的。比如是:相同概率或者概率有可控规律,这在游戏中的运行比较广泛。还有就是,生成随机数应该要有周期性。因此可以使用改进的方法。
具体见下:
https://www.learncpp.com/cpp-tutorial/59-random-number-generation/
6.输入验证
当执行如下程序时:
int a;
dobule b;
cin>>a;
cin>>b;
如果在输入内容的时候,输入了5z的话,在输入缓冲区内,5被赋给了a,但是剩下的z就仍然留在了缓冲区。在下次需要输入赋值的时候,直接赋值且并不会询问。在这个程序中,z被直接赋值了b,这就导致了程序错误。
因此在进行输入的时候,要记得对输入内容进行验证。
当输入错误的时候,cin可进入故障模式:
cin.ignore():虽然也是删除缓冲区中数据的作用,但其对缓冲区中的删除数据控制的较精确。
具体用法如下:
cin.ignore(int intExp, char chExp);
其中intExp 是一个整型表达式,也可以是一个整型数值,这个数值表示在一行中忽略的字符的最大数目,比如说intExp=100;还有一个参数chExp,是一个字符表达式。
这样解释:cin.ignore()停下有两种情况:一种是表示如果遇到一个字符值等于chEXP,那么就停止ignore();还有一种是,100个字符之后,如果还没有遇到字符值等于chEXP,此时也要停下,所以100是ignore()所忽略的最大字符数。
cin.fail():验证输入是否失败。
cin.sync():是清空缓冲区。
在使用std::cin时,为了使程序健壮,要对输入的内容进行验证,可以进行如下考虑: