1、项目需求:实现黑客攻击系统菜单打印
实现:
#include <iostream>#include <Windows.h>int main( void ) {std::cout << "1. 网站 404 攻击 " << std::endl;std::cout << "2. 网站篡改攻击 " << std::endl;std::cout << "3. 网站攻击记录 " << std::endl;std::cout << "4.DNS 攻击 " << std::endl;std::cout << "5. 服务器重启攻击 " << std::endl;system( "pause" );return 0;}
需求增加:没有输入账号登录, 就直接显示功能菜单. 应该先让用户输入账号并登录
实现:
#include <iostream>#include <Windows.h>int main( void ) {char name;int pwd;std::cout << " 请输入账号: " ;std::cin >> name;std::cout << " 请输入密码: " ;std::cin >> pwd;/*std::cout << "1. 网站 404 攻击 " << std::endl;std::cout << "2. 网站篡改攻击 " << std::endl;std::cout << "3. 网站攻击记录 " << std::endl;std::cout << "4.DNS 攻击 " << std::endl;std::cout << "5. 服务器重启攻击 " << std::endl;*/system( "pause" );return 0;}
不用懂代码,只是让你跟着敲,熟悉头文件的名字,熟悉主函数。
注意:该实现存在以下问题,1. 账号名称太简单,只能输入单个字符2. 密码只能是整数,太简单,不安全。3. 密码输入时,不能隐藏,这是最不安全的地方,也是本项目实现核心的地方。
2、C++数据类型
已经是用过的数据类型有:字符串类型、整数类型
2.1什么是数据类型?
int | usigned int | char |
usigned char | long | long long |
unsigned long | short | unsigned short |
float | double | 各种指针类型 |
枚举类型 | struct结构体类型 | union联合类型 |
bool | string | 类 |
其中C++完全支持C语言的各种数据类型,不同数据类型的区别:
1. 表示意义不同2. 占用内存不同3. 表示的范围不同4. 使用方法不同
1996 年 6 月 4 日,阿丽亚娜 5 型运载火箭的首次发射点火后,火箭开始偏离路线,最终被逼引爆自毁,整个过程只有短短 30 秒。阿丽亚娜 5 型运载火箭基于前一代 4 型火箭开发在 4 型火箭系统中,对一个水平速率的测量值使用了 16 位的变量及内存,因为在 4 型火箭系统中反复验证过,这一值不会超过 16 位的变量,而 5 型火箭的开发人员简单复制了这部分程序,而没有对新火箭进行数值的验证,结果发生了致命的数值溢出。发射后这个 64 位带小数点的变量被转换成 16 位不带小数点的变量,引发了一系列的错误,从而影响了火箭上所有的计算机和硬件,瘫痪了整个系统,因而不得不选择自毁,4 亿美金变成一个巨大的花。
3、变量
变量,不是数学中的变量,程序在运行时,需要保存很多内容常常变化的数据。
变量,是内存中的一块存储空间,即一小块内存
变量的定义形式:
int x;int y;
int x, y;
int x = 100;
int a; // 定义了一个变量a = 100;
![](https://img-blog.csdnimg.cn/e3c2dc9d66b249f8a78a8c3ab3d53029.png)
大端模式:低字节存放到高地址中小端模式:低字节存放到低地址中。
1) 只能包含 3 种字符(数字、大 / 小写字母,下划线和 $ )2) 不能以数字开头(即,只能以字母或下划线或者 $开头 ), 很多人可能不知道可以用$符号开头。这是企业面试喜欢问的 。
3) 不能和“关键字”同名(c 语言内部已经使用的“名称”),比如类型名 int4)变量名的最大长度, C 语言没有规定。 最大长度限制,取决于编译器,一般都在 32 以上。
小驼峰命名:如果只有一个单词则全部小写,如果有多个单词,则从第二 个单词开始,所有单词首字母大写。
大驼峰命名:如果只有一个单词,首字母大写即可,如果有多个单词,则每个单词首字母大写即可。
4、整形
‘0’ ‘1’ ‘2’ ‘3’ ...... ‘9’‘a ’ ‘b’ ‘c’ ‘d’ ...... ‘z’‘A’ ‘B’ ‘C’ ‘D’ ...... ‘Z’‘,’‘-’‘!’ ‘#’.......
![](https://img-blog.csdnimg.cn/ca0e8687e0ad402685580ce66a2caa3c.png)
![](https://img-blog.csdnimg.cn/88ac7f84c3a74642a4049f18c51aaed8.png)
ASCII表需要记住四个特殊的字符的ASCII码值,字符'0'的ASCII码值为48,字符'A'的ASCII码值为65,字符'a'的ASCII码值为97。字符'\0'的ASCII码值为0(重点!!)
char name ='a'
int x = 0;x = ‘a’ + 1; // 97 + 1
int x = 1;char y = ‘1’; //49
5、浮点型:用于精确计算的数据类型(浮点型)
![](https://img-blog.csdnimg.cn/8f141ac79d764f24bbb07c74d0d991d3.png)
![](https://img-blog.csdnimg.cn/5771532af71040b490ce20f102255b26.png)
注意:C语言和C++语言是兼容的,即float类型精度只有7位有效数字,但是在C语言中printf( )打印时,默认是打印小数点后6位,再说一遍,是打印小数点后6位,加上前面一位共7位有效数字。
而C++默认打印6位有效数字位,注意是,6位有效数字位!!注意区别。为了检测你有没有真的搞懂,看一个案例:
打印结果是什么?先不着急看答案,先自己想想:
答案:
如果这个搞懂了,那就没什么问题了。但是C语言怎么打印有效数字位?上面那个题目怎么用C语言打印6位的有效数字?? 只需用%g来格式打印即可。
至于怎么控制有效数字位数?C语言中,%.mg,m就是控制位数,C++语言要稍微复杂一些,我么后面讲解。
float 类型的存储方式:
符号位: 0 代表正数, 1 代表负数阶码: 指数 +127符号位 尾数 * 2 ^ ( 阶码 -127)
![](https://img-blog.csdnimg.cn/b804d745e9b3449bb12e4bd25e6e42d7.png)
阶码用移码表示,位数用原码表示,隐藏一位1,有效位数为24位,因此把int型转为float类型可能会有精度丢失(企业面试考点)。实际存储如下:
有效位数为53位。
3.14 是 double 类型3.14f 强制指定是 float 类型
1 是 int 类型的常量1.0 是 double 类型的常量
#include<iostream>
#include<Windows.h>
using namespace std;
int main(void) {
double value = 12.3456789;
cout << value << endl;// 默认精度是 6,所以输出为 12.3457,(默认情况下,精度是指总的有效数字)
cout.precision(4);// 把精度修改为 4
cout << value << endl;// 输出 12.35, 对最后一位四舍五入,精度修改后,持续有效,直到精度再次被修改
cout.flags(cout.fixed);// 使用定点法, 精度变成小数点后面的位数
cout << value << endl;//输出 12.3457
cout << 3.1415926535 << endl;// 定点法持续有效,输出 3.1416
cout.unsetf(cout.fixed);// 把精度恢复成有效数字位数
cout << value << endl; //输出 12.35
cout << 3.1415926535 << endl; //输出 3.142
system("pause");
return 0;
}
原来C++语言的精度也是自己手动控制,但是默认打印的是有效位数,而不是打印小数点后几位,因此要通过语句cout.flags(cout.fixed)来修改。
这个案例是浮点数打印的经典案例,必须自己手动敲牢牢掌握。