C++结构复习讲解
结构:struct,常用来储存某一类型的变量,在cpp文件中。
struct DirLight {
vec3 direction;
vec3 ambient;
vec3 diffuse;
vec3 specular;
};
uniform DirLight dirLight; // 可以通过dirlignt.ambient访问其中的某一个属性
结构适合于将某一类属性归类,却又不需要创建类的情况下。比如创建一个灯的所有属性,却又不需要创建一个灯的类。我们可以通过灯.属性来调用它。
Halt:退出程序。
#include 中的 exit(0)方法可以立即退出程序。
Switch:(长时间不用忘记了)
switch(color)
{
caseCOLOR_BLACK:
std::cout<< "Black";
break;
caseCOLOR_WHITE:
std::cout<< "White";
break;
default:
std::cout<< "Unknown";
break;
}
static_cast(x) 是错的,static_cast(y)只能实现基本类型的强转。
同Java,break是跳出整个循环,continue是跳出本次循环。
生成随机数:
#include // for rand() and srand()
intmain()
{
srand(5323);// 设置一个初始值,只被调用一次(0——32767)
std::cout<< rand()<< "\t"; // 反复调用,返回新的随机数
// 多次运行将返回相同的序列(如果srand()中的初始值相同的话)。如果想要返回不同的序列,我们可以传入一个时间值,因为时间是总是不同的。
srand(static_cast(time(0)));
return0;
}
在给定的范围内生成随机数:(调用getRandomNumber(1,6)生成1-6之间的随机数)
intgetRandomNumber(intmin,intmax)
{
staticconstdoublefraction= 1.0/ (static_cast(RAND_MAX)+ 1.0);// static used for efficiency, so we only calculate this value once
// evenly distribute the random number across our range
returnmin+ static_cast((max- min+ 1)* (rand()* fraction));
}
请考虑用户如何滥用程序,尤其是在文本输入方面。对于每个文本输入点,请考虑:提取失败了吗?用户可以输入比预期更多的输入吗?用户可以输入无意义的输入吗?用户能否溢出输入?
所以,需要测试修复用户输入:
if(std::cin.fail())// 如果用户输入失败
{
std::cin.clear();// 清空输入缓冲
std::cin.ignore(32767,'\n');// 移除失败输入
}