(笔记总结)C/C++语言的常用库函数(持续记录,积累量变)
写在前面:
由于时间的不足与学习的碎片化,写博客变得有些奢侈。
但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈。
既然如此
不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录,记录笔者认为最通俗、最有帮助的资料,并尽量总结几句话指明本质,以便于日后搜索起来更加容易。
标题的结构如下:“类型”:“知识点”——“简短的解释”
部分内容由于保密协议无法上传。
点击此处进入学习日记的总目录
C/C++语言的常用库函数
- 一、<stdio.h>——标准输入/输出库
- 1、scanf()与printf()——输入与输出
- 2、fgets() ——输入字符串
- 3、putchar()——输出一个字符
- 4、getchar()——输入一个字符并将其转化为整型
- 5、sprintf()——将输出的字符串保存到指定字符串
- 6、sscanf()——将输入的字符串保存到指定字符串
- 二、< iostream>——C++标准库
- 1、cin >>——读取一个变量
- 2、cin.get()——读取一个字符
- 3、cin.get()——读取一行 & 指定读取最大位数 & 指定结束符(默认换行)
- 4、cin.getline——输入一行 且 指定结束符(默认换行)
- 5、cin.ignore——清空输入缓冲区
- 三、<string.h>——字符串处理函数库
- 字符串处理函数:1-4
- 1、strcpy()——复制字符串
- 2、strncpy()——复制指定位数字符串
- 3、strcat()——连接字符串
- 4、strncat()——复制指定位数字符串
- 字符串比较函数:5-6
- 5、strcmp()——比较字符串
- 6、strncmp()——比较指定位数字符串
- 字符串查找函数:7-13
- 7、strchr()——返回 字符c 在字符串s 第一次出现的地址
- 8、strcspn()——返回 字符串s2 在字符串s1 第一次出现的下标
- 9、strspn()——返回 字符串s2 在字符串s1 第一个未出现字符的下标
- 10、strpbrk()——返回 字符串s2 在字符串s1 第一次出现的地址
- 11、strrchr()——返回 字符c 在字符串s 最后出现的地址
- 12、strstr()——返回 字符串s2 在字符串s1 第一次出现的地址
- 13、strtok()——返回 字符c 在字符串s 第一次出现的地址 并将该位置的字符设为'\0'
- 内存处理函数:14-18
- 14、memcpy()——将s2的前n位字符 覆盖 s1的前n位字符
- 15、memmove()——先将s2里的前n位字符复制到 一个临时数组,然后再覆盖s1的前n位字符
- 16、memcmp()——与strncmp相同,只不过memcmp不止可以处理字符串
- 17、memchr()——与strchr相同,只不过需要用void*定义的指针去接收地址
- 18、memset()——将c覆盖s的前n位,返回指向s的void型指针
- 19、strerror ()——返回指向错误号字符串的指针
- 20、strlen()——返回字符串结束符前面字符的个数
- 21、getline()——输入一行字符串,遇到换行符停止,保存时不保存换行符
- 四、<stdlib.h>——通用工具函数库
- 1、strtod()——将字符串转为双精度浮点数
- 2、strtol()——将字符串转为长整型数
- 3、strtoul()——将字符串转为无符号长整形数
- 4、exit() 和 atexit()——程序终止与程序反向运行
- 1. exit()
- 2. atexit()
- 五、<ctype.h>——字符处理函数库
- 1、isblank()——判断是否为空格
- 2、isdigit()——判断是否为数字
- 3、isalpha()——判断是否为大写字母 或 小写字母
- 4、isalnum()——判断大写字母 或 小写字母 或 数字
- 5、isxdigit()——判断是否为十六进制的数字
- 6、islower()——判断是否为小写字母
- 7、isupper()——判断是否为大写字母
- 8、tolower()——将大写字母 改为 小写
- 9、toupper()——将小写字母 改为 大写
- 10、isspace()——判断是否为空白字符 换行符('\n')空格符(' ')换页符('\f')回车符(‘\r’)水平制表符('t')垂直制表符('\v')
- 11、iscntrl()——判断是否为空白字符 水平制表符('\t')垂直制表符('\v')换页符('\f')报警符(‘\a’)退格符(\b')回车符(‘\r’)换行符('\n')空字符('\0')
- 12、ispunct()——判断是否为空格 数字 字母以外的 可打印字符
- 13、isprint()——判断是否为 大写字母 小写字母 数字 标点符号 空格符
- 14、sgraph()——判断是否为 大写字母 小写字母 数字 标点符号
- 六、<Windows.h>——windows操作工具
- 1、FindWindow()——返回的窗口的句柄
- 2、GetForegroundWindow()——获取当前的活动窗口
- 3、SetForegroundWindow()——设置当前的活动窗口
- 4、keybd_event()——模拟按键
一、<stdio.h>——标准输入/输出库
1、scanf()与printf()——输入与输出
- scanf()与printf()中格式说明符几乎相同的一部分
| 格式说明符 | 解释 |
|---|---|
| %d | 用来输入和输出int |
| %ld | 用来输入和输出long int |
| %lld | 用来输入和输出long long int |
| %hd | 用来输入和输出short |
| %i | 用来输入和输出有符号十进制整数 |
| %u | 用来输入和输出无符号十进制整数 |
| %lu | 用来输入和输出无符号十进制长整数 |
| %llu | 用来输入和输出无符号十进制长长整数 |
| %hu | 用来输入和输出无符号短十进制整数 |
| %o | 用来输入和输出八进制整数 |
| %lo | 用来输入和输出长八进制整数 |
| %ho | 用来输入和输出短八进制整数 |
| %#o | 用来输出八进制整数,数字前有0 |
| %x | 用来输入和输出十六制整数,字母小写 |
| %#x | 用来输出十六制整数,字母小写,数字前有0x |
| %lx | 用来输入和输出长十六制整数,字母小写 |
| %X | 用来输入和输出十六制整数,字母大写 |
| %#X | 用来输出十六制整数,字母大写 ,数字前有0X |
| %lX | 用来输入和输出长十六制整数,字母大写 |
| %c | 用来输入和输出单个字符 |
| %s | 用来输入和输出一串字符串 输入时遇空格,制表符或换行符结束 输出时连格式说明符一起输出 printf("%s","%d%f",a,b);输出 %d%f |
| %f | 用来输入和输出float,输出double |
| %lf | 用来输入和输出double(double输出用%f和%lf都可以) |
| %Lf | 用来输入和输出long double |
| %e | 用来输入和输出指数,字母小写 |
| %le | 用来输入和输出长指数,字母小写 |
| %E | 用来输入和输出指数,字母大写 |
| %lE | 用来输入和输出长指数,字母大写 |
| %g | 用来输入和输出指数或float(输出最短的一种),字母小写 |
| %lg | 用来输入和输出长指数或double(输出最短的一种),字母小写 |
| %G | 用来输入和输出指数或float(输出最短的一种),字母大写 |
| %lG | 用来输入和输出长指数或double(输出最短的一种),字母大写 |
- scanf()独有
| 格式说明符 | 解释 |
|---|---|
| %*(所有类型),如%*d | 用来输入一个数,字符或字符串而不赋值(跳过无关输入) 如scanf(“%d%*c%d”,&a,&b); 这样就可以只将1+2中的1和2赋值给a和b。 |
| %m(所有类型),其中m为常数 | 限定输入范围,如scanf(“%4d”,&a)时输入123456,只把1234赋值给a |
| ,(逗号) | 无实际用处,仅用于美观。如scanf(“%d,%d,%d”,&a,&b,&c); |
| -(横杠) :(冒号) | 方便日期等输入,但不赋值 scanf(“%d-%d-%d”,&a,&b,&c);需输入2018-11-20 scanf(“%d:%d:%d”:&a,&b,&c);需输入2018:11:20 |
| 所有字符串,符号(包括空格) 数字(不与输入数相挨) | 任何所写的东西都必须如横杠一般先输入(不赋值),不然系统报错 scanf(“%d 456 %d”,&a,&b); 需输入 1 456 7(1和7之间有 456 (前后各一个空格)) 结果为a=1 b=7 |
- printf()独有
| 格式说明符 | 解释 |
|---|---|
| %m.nd %-m.nd (m和n为常数) | m用于在d位数小于m时补空格(右对齐)d位数大于m时忽略 如%5d,输出123, 123(123前面两个空格) .n用于在d位数小于n时补0(右对齐)d位数大于n时忽略 如%.5d,输出123, 00123(123前面两个0) %-m.nd则为左对齐 |
| %m.nf %m.nlf %m.nLf %-m.nf %-m.nlf %-m.nLf | m用于在小数位数小于m时补空格(右对齐) 小数位数大于m时忽略 (小数点算一位) 如%6f 需输出3.14 结果为 3.14(3.14前面两个空格) .n用于控制小数位数 小数部分长度大于n则四舍五入 小数部分长度小于于n则补0 如%.6f 需输出3.14 结果为3.140000 如%6f 需输出3.1415926 结果为3.141593 %-m.nf %-m.nlf %-m.nLf 则为左对齐 |
| %m.ns %-m.ns | m用于在字符串位数小于m时补空格(右对齐)字符串位数大于m时忽略 如%5s,输出abc, abc(abc前面两个空格) .n用于控制字符串位数 长度大于n则仅输出前n位 字符串长度小于于n时忽略 如%.6s 需输出abcdefg 结果为abcdef 如%6f 需输出abc 结果为abc %-m.ns则为左对齐 |
| %mc %-mc | m限制char的输出长度 当m>1时,在左方补m-1个空格 %-mc则为左对齐 |
| %m.ne %-m.ne %m.nE %-m.nE | m用于控制指数长度,在QT中,指数部分占五位(如 e+001 ) 位数小于m时左方补空格 位数大于m时忽略 如printf(“%15.5e”,a); 设a为123.456789 结果为 1.23457e+002(三个空格) .n用于控制小数长度 小数部分长度大于n则四舍五入 小数部分长度小于于n则补0 如printf(“%15.5e”,a); 设a为123.456789 结果为 1.23457e+002(三个空格)%-m.ne %-m.nE则为左对齐 |
| %*(整型)如%d %-(整型) | 在输出项中规定整型数据的宽度,少于限制补空格,大于忽略 如printf(“%d”,a,b); a=5 b=123 结果为 123(前面有两个空格) %-(整型) 左对齐 |
| %0*(整型) | 在输出项中规定整型数据的宽度,少于限制补0,大于忽略 如printf(“%0*d”,a,b); a=5 b=123 结果为 00123 |
| 注意 | printf()中的运算是从右至左,而输出是从做左至右 如a=1,printf(“%d %d %d”,a++,a++,a++); 结果为3 2 1 |
2、fgets() ——输入字符串
| 函数 | 解释 |
|---|---|
| char *fgets(char *s, int n,PILE *stream); | 将输入的字符串存在s中,只保存n-1位,stream是输入流,一般用stdin 注意n一定不大于数组。 输入如果遇见换行符或文件结束符会提前停止输入,但换行符也会被保存 读入结束后,一个空字符(‘\0’)被保存在数组的结尾 char a[10];fgets(a,10,stdin);printf("%s",a);输入 A+B=C=de=f/e 输出 A+B=C=de |
3、putchar()——输出一个字符
| 函数 | 解释 |
|---|---|
| int putchar(int c); | 输出一个字符 |
4、getchar()——输入一个字符并将其转化为整型
| 函数 | 解释 |
|---|---|
| int getchar(void); | 输入一个字符并将其转化为整型 |
5、sprintf()——将输出的字符串保存到指定字符串
| 函数 | 解释 |
|---|---|
| int sprintf(char *s,“内容%d”,int c); | 除了是将输出的字符串保存到字符串*s以外 与printf()没什么区别 %d可以为其他格式说明符 |
6、sscanf()——将输入的字符串保存到指定字符串
| 函数 | 解释 |
|---|---|
| int sscanf(char *s,“内容%d”,int c); | 除了内容是从字符串*s输入的以外 其他和scanf没什么区别 |
参考资料:
(超全,超经典)scanf()函数与printf()中的格式说明符
(超全,超经典)字符串函数与易错点
二、< iostream>——C++标准库
1、cin >>——读取一个变量
cin是C++编程语言中的标准输入流对象,即istream类的对象。cin主要用于从标准输入读取数据,这里的标准输入,指的是终端的键盘。
在理解cin功能时,不得不提标准输入缓冲区。当我们从键盘输入字符串的时候需要敲一下回车键才能够将这个字符串送入到缓冲区中,那么敲入的这个回车键(\r)会被转换为一个换行符\n,这个换行符\n也会被存储在cin的缓冲区中并且被当成一个字符来计算!比如我们在键盘上敲下了123456这个字符串,然后敲一下回车键(\r)将这个字符串送入了缓冲区中,那么此时缓冲区中的字节个数是7 ,而不是6。
cin读取数据也是从缓冲区中获取数据,缓冲区为空时,cin的成员函数会阻塞等待数据的到来,一旦缓冲区中有数据,就触发cin的成员函数去读取数据。
#include <iostream>using namespace std;int main(){char a;int b;float c;cin>> a >> b >> c;cout << a << " " << b << " " << c << " " << endl;system("pause");return 0;}
程序输入:d 56 67.777[回车]

使用cin读取键盘输入时,难免发生错误,一旦出错,cin将设置条件状态(condition state)。
| 条件状态标识符号 | 含义 |
|---|---|
| goodbit | 无错误 |
| eofbit | 已到达文件尾 |
| failbit | 非致命的输入/输出错误,可挽回 |
| badbit | 致命的输入/输出错误,无法挽回 |
若在输入输出类里.需要加iOS::标识符号。与这些条件状态对应的就是设置、读取和判断条件状态的流对象的成员函数。
他们主要有:
s.eof():若流s的eofbit置位,则返回true;
s.fail():若流s的failbit置位,则返回true;
s.bad():若流s的badbit置位,则返回true;
s.good():若流s的goodbit置位,则返回true;
s.clear(flags):清空状态标志位,并将给定的标志位flags置为1,返回void。
s.setstate(flags):根据给定的flags条件状态标志位,将流s中对应的条件状态位置为1,返回void。
s.rdstate():返回流s的当前条件状态,返回值类型为strm::iostate。strm::iostate 机器相关的整形名,由各个iostream类定义,用于定义条件状态。
#include <iostream>
using namespace std;int main()
{
char ch, str[20]; cin.getline(str, 5);cout<<"flag1:"<<cin.good()<<endl; // 查看goodbit状态,即是否有异常cin.clear(); // 清除错误标志cout<<"flag1:"<<cin.good()<<endl; // 清除标志后再查看异常状态cin>>ch; cout<<"str:"<<str<<endl;cout<<"ch :"<<ch<<endl;system("pause");return 0;
}
程序输入:12345[回车]

可以看出,因输入缓冲区未读取完造成输入异常,通过clear()可以清除输入流对象cin的异常状态。不影响后面的cin>>ch从输入缓冲区读取数据。因为cin.getline读取之后,输入缓冲区中残留的字符串是:5[换行],所以cin>>ch将5读取并存入ch,打印输入并输出5。
如果将clear()注释,cin>>ch;将读取失败,ch为空。
cin.clear()等同于cin.clear(ios::goodbit);因为cin.clear()的默认参数是ios::goodbit,所以不需显示传递,故而你最常看到的就是:
cin.clear()。
2、cin.get()——读取一个字符
#include <iostream>
using namespace std;int main()
{char a;char b;a = cin.get();cin.get(b);cout << a << b << endl;system("pause");return 0;
}
程序输入:3456[回车]

Tips:空格与回车也算一个字符
3、cin.get()——读取一行 & 指定读取最大位数 & 指定结束符(默认换行)
istream& get ( char* s, streamsize n ) // 读取一行,指定读取n个数
istream& get ( char* s, size_t n, streamsize delim ) // 读取一行,指定读取n个数,且指定结束字符
空格不会终止输入,碰到换行符才会停止输入
#include <iostream>
using namespace std;int main()
{char array[20] = { NULL };cin.get(array, 20);cout << array ;system("pause");return 0;
}
程序输入:3456 789[回车]

#include <iostream>
using namespace std;int main()
{char array[20] = { NULL };cin.get(array,20,'b');cout << array ;system("pause");return 0;
}
程序输入:adgd yuibklohg[回车]

4、cin.getline——输入一行 且 指定结束符(默认换行)
istream& getline(char* s, streamsize count); // 默认以换行符结束
istream& getline(char* s, streamsize count, char delim); // 读取一行,指定读取n个数,且指定结束字符
使用方法和cin.get相同
cin.getline与cin.get的区别是,cin.getline不会将结束符或者换行符残留在输入缓冲区中。
5、cin.ignore——清空输入缓冲区
从上文中可以看出,上一次的输入操作很有可能是输入缓冲区中残留数据,影响下一次的输入。
那么如何解决这个问题呢?
自然而然,我们想到了在进行输入时,对输入缓冲区进行清空和状态条件的复位。条件状态的复位使用clear(),清空输入缓冲区应该使用:
函数原型:istream &ignore( streamsize num=1, int delim=EOF );
函数作用:跳过输入流中n个字符,或在遇到指定的终止字符时提前结束(此时跳过包括终止字符在内的若干字符)。
使用示例如下:
#include <iostream>
using namespace std;int main()
{char str1[20]={NULL},str2[20]={NULL};cin.getline(str1,5);cin.clear(); // 清除错误标志 cin.ignore(numeric_limits<std::streamsize>::max(),'\n'); //清除缓冲区的当前行cin.getline(str2,20);cout<<"str1:"<<str1<<endl;cout<<"str2:"<<str2<<endl;system("pause");return 0;
}
程序输入:12345[回车]success[回车]

注意:
(1)程序中使用cin.ignore清空了输入缓冲区的当前行,使上次的输入残留下的数据没有影响到下一次的输入,这就是ignore()函数的主要作用。其中,numeric_limits::max()不过是头文件定义的流使用的最大值,你也可以用一个足够大的整数代替它。
如果想清空输入缓冲区,去掉换行符,使用:
cin.ignore(numeric_limits< std::streamsize>::max()); 清除cin里所有内容。
(2)cin.ignore();当输入缓冲区没有数据时,也会阻塞等待数据的到来。
参考资料:
C++中cin的详细用法
(超全,超经典)字符串函数与易错点
C++ cin.get用法(详解版)
三、<string.h>——字符串处理函数库
字符串处理函数:1-4
1、strcpy()——复制字符串

2、strncpy()——复制指定位数字符串

3、strcat()——连接字符串

4、strncat()——复制指定位数字符串

字符串比较函数:5-6
5、strcmp()——比较字符串

6、strncmp()——比较指定位数字符串

字符串查找函数:7-13
7、strchr()——返回 字符c 在字符串s 第一次出现的地址

8、strcspn()——返回 字符串s2 在字符串s1 第一次出现的下标

9、strspn()——返回 字符串s2 在字符串s1 第一个未出现字符的下标

10、strpbrk()——返回 字符串s2 在字符串s1 第一次出现的地址

11、strrchr()——返回 字符c 在字符串s 最后出现的地址

12、strstr()——返回 字符串s2 在字符串s1 第一次出现的地址

13、strtok()——返回 字符c 在字符串s 第一次出现的地址 并将该位置的字符设为’\0’

图片内程序有些不清楚,下面重新打了一遍
char a[13]="4cabc56c78c9";
char *c=strtok(a,"ab");
//搜索s2中的第一个字符,将s1中的该字符覆盖为'\0',strtok函数保存标号后‘\0’的地址,返回标号第一个字符地址。
printf("*%s*\n",c);
c=strtok(nullptr,"z");
//返回搜索起始字符地址,保存nullptr。
printf("*%s*\n",c);
c=strtok(nullptr,"c");
//当strtok保存的本来就是nullptr,返回nullptr。
printf("*%s*\n",c);
for(int n=0;n<13;n++)
printf("%c",a[n]);

内存处理函数:14-18
14、memcpy()——将s2的前n位字符 覆盖 s1的前n位字符

15、memmove()——先将s2里的前n位字符复制到 一个临时数组,然后再覆盖s1的前n位字符

16、memcmp()——与strncmp相同,只不过memcmp不止可以处理字符串

17、memchr()——与strchr相同,只不过需要用void*定义的指针去接收地址

18、memset()——将c覆盖s的前n位,返回指向s的void型指针

19、strerror ()——返回指向错误号字符串的指针

20、strlen()——返回字符串结束符前面字符的个数

21、getline()——输入一行字符串,遇到换行符停止,保存时不保存换行符

参考资料:
(超全,超经典)字符串函数与易错点
C++中cin的详细用法
四、<stdlib.h>——通用工具函数库
1、strtod()——将字符串转为双精度浮点数

2、strtol()——将字符串转为长整型数

3、strtoul()——将字符串转为无符号长整形数

4、exit() 和 atexit()——程序终止与程序反向运行
1. exit()
函数exit强制终止程序的运行。
2. atexit()
在程序结束时(包括被exit()打断的)按照相反的顺序运行函数
#inc2024.01.22)
# 一、lude<stdio.h>
#include<stdlib.h>void a(void)
{printf("%s\n","this is a;");
}void b(void)
{printf("%s\n","this is b;");
}void c(void)
{printf("%s\n","this is c;");
}int main()
{printf("%s\n","this is main first;");//在程序结束时按照相反的顺序运行函数atexit(a);atexit(b);atexit(c);printf("%s\n","this is main;");exit(EXIT_SUCCESS);printf("%s\n","this is main 2;");
}
结果为
this is main first;
this is main;
this is c;
this is b;
this is a;
参考资料:
(超全,超经典)字符串函数与易错点
(学习日记)2024.01.20:通用工具库stdlib.h里好玩的函数
五、<ctype.h>——字符处理函数库
1、isblank()——判断是否为空格

2、isdigit()——判断是否为数字

3、isalpha()——判断是否为大写字母 或 小写字母

4、isalnum()——判断大写字母 或 小写字母 或 数字

5、isxdigit()——判断是否为十六进制的数字

6、islower()——判断是否为小写字母

7、isupper()——判断是否为大写字母

8、tolower()——将大写字母 改为 小写

9、toupper()——将小写字母 改为 大写

10、isspace()——判断是否为空白字符 换行符(‘\n’)空格符(’ ‘)换页符(’\f’)回车符(‘\r’)水平制表符(‘t’)垂直制表符(‘\v’)

11、iscntrl()——判断是否为空白字符 水平制表符(‘\t’)垂直制表符(‘\v’)换页符(‘\f’)报警符(‘\a’)退格符(\b’)回车符(‘\r’)换行符(‘\n’)空字符(‘\0’)

12、ispunct()——判断是否为空格 数字 字母以外的 可打印字符

13、isprint()——判断是否为 大写字母 小写字母 数字 标点符号 空格符

14、sgraph()——判断是否为 大写字母 小写字母 数字 标点符号

参考资料:
(超全,超经典)字符串函数与易错点
六、<Windows.h>——windows操作工具
Windows.h是一个重要的头文件,它包含了其他Windows头文件,这些头文件的某些也包含了其他头文件。
这些头文件中最重要的和最基本的是:
- Windef.h 基本数据类型定义。
- Winnt.h 支持Unicode的类型定义。
- Winbase.h Kernel(内核)函数。
- Winuser.h 用户界面函数。
- Wingdi.h 图形设备接口函数。
这些头文件定义了Windows的所有资料型态、函数调用、资料结构和常数识别字,它们是Windows文件中的一个重要部分。
1、FindWindow()——返回的窗口的句柄
寻找窗口 类名称 标题 spy++获取 返回的窗口的句柄
2、GetForegroundWindow()——获取当前的活动窗口
获取当前的活动窗口
3、SetForegroundWindow()——设置当前的活动窗口
设置当前的活动窗口
4、keybd_event()——模拟按键
模拟按键
(其中
ESC键VK_ESCAPE (27)
回车键:VK_RETURN (13)
TAB键:VK_TAB (9)
Caps Lock键:VK_CAPITAL (20)
Shift键:VK_SHIFT (16)
Ctrl键:VK_CONTROL (17)
Alt键:VK_MENU (18)
空格键:VK_SPACE (32)
退格键:VK_BACK (8)
左徽标键:VK_LWIN (91)
右徽标键:VK_RWIN (92)
鼠标右键快捷键:VK_APPS (93)
Insert键:VK_INSERT (45)
Home键:VK_HOME (36)
Page Up:VK_PRIOR (33)
PageDown:VK_NEXT (34)
End键:VK_END (35)
Delete键:VK_DELETE (46)
方向键(←):VK_LEFT (37)
方向键(↑):VK_UP (38)
方向键(→):VK_RIGHT (39)
方向键(↓):VK_DOWN (40)
F1键:VK_F1 (112)
F2键:VK_F2 (113)
F3键:VK_F3 (114)
F4键:VK_F4 (115)
F5键:VK_F5 (116)
F6键:VK_F6 (117)
F7键:VK_F7 (118)
F8键:VK_F8 (119)
F9键:VK_F9 (120)
F10键:VK_F10 (121)
F11键:VK_F11 (122)
F12键:VK_F12 (123)
Num Lock键:VK_NUMLOCK (144)
小键盘0:VK_NUMPAD0 (96)
小键盘1:VK_NUMPAD1 (97)
小键盘2:VK_NUMPAD2 (98)
小键盘3:VK_NUMPAD3 (99)
小键盘4:VK_NUMPAD4 (100)
小键盘5:VK_NUMPAD5 (101)
小键盘6:VK_NUMPAD6 (102)
小键盘7:VK_NUMPAD7 (103)
小键盘8:VK_NUMPAD8 (104)
小键盘9:VK_NUMPAD9 (105)
小键盘。:VK_DECIMAL (110)
小键盘*:VK_MULTIPLY (106)
小键盘+:VK_ADD (107)
小键盘-:VK_SUBTRACT (109)
小键盘/:VK_DIVIDE (111)
Pause Break键:VK_PAUSE (19)
Scroll Lock 键 :VK_SCROLL(145)
)
参考资料:
有意思的函数
相关文章:
(笔记总结)C/C++语言的常用库函数(持续记录,积累量变)
写在前面: 由于时间的不足与学习的碎片化,写博客变得有些奢侈。 但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈。 既然如此 不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录&a…...
OceanBase集群扩缩容
OceanBase 数据库采用 Shared-Nothing 架构,各个节点之间完全对等,每个节点都有自己的 SQL 引擎、存储引擎、事务引擎,天然支持多租户,租户间资源、数据隔离,集群运行的最小资源单元是Unit,每个租户在每…...
html 3D 倒计时爆炸特效
下面是代码: <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>HTML5 Canvas 3D 倒计时爆炸特效DEMO演示</title><link rel"stylesheet" href"css/style.css" media"screen&q…...
记一次垃圾笔记应用VNote安装失败过程
特色功能简介 1.全文搜索: VNote支持根据关键词搜索整个笔记本或者特定文件夹内的文档内容,非常适合快速找到信息。 2.标签管理: 你可以给笔记添加标签,从而更好地组织和检索你的笔记内容。 3.自定义主题和样式: 进入设置,VNote允许你选…...
记一次 stackoverflowerror 线上排查过程
一.线上 stackOverFlowError xxx日,突然收到线上日志关键字频繁告警 classCastException.从字面上的报警来看,仅仅是类型转换异常,查看细则发现其实是 stackOverFlowError.很多同学面试的时候总会被问到有没有遇到过线上stackOverFlowError?有么有遇到栈溢出?具体栈溢出怎么来…...
论文写作之十个问题
前言 最近进入瓶颈? 改论文,改到有些抑郁了 总是不对,总是被打回 好的写作,让人一看就清楚明白非常重要 郁闷时候看看大佬们怎么说的 沈向洋、华刚:读科研论文的三个层次、四个阶段与十个问题 十问 What is the pro…...
leetcode2171 拿出最少数目的魔法豆
题目 给定一个 正整数 数组 beans ,其中每个整数表示一个袋子里装的魔法豆的数目。 请你从每个袋子中 拿出 一些豆子(也可以 不拿出),使得剩下的 非空 袋子中(即 至少还有一颗 魔法豆的袋子)魔法豆的数目…...
测试C#调用OpenCvSharp和ViewFaceCore从摄像头中识别人脸
学习了基于OpenCvSharp获取摄像头数据,同时学习了基于ViewFaceCore的人脸识别用法,将这两者结合即是从摄像头中识别人脸。本文测试测试C#调用OpenCvSharp和ViewFaceCore从摄像头中识别人脸,并进行人脸红框标记。 新建Winform项目…...
测试经理面试初体验
家人们谁懂啊,我在海口实在难找计算机类的实习,就直接在BOss上海投了,结果一个hr直接给我弄了个测试经理的面试(可能年底冲业绩吧),然后就在明天下午,我直接抱下f脚了,就当体验一下~…...
使用ffmpeg调整视频中音频采样率及声道
1 原始视频信息 通过ffmpeg -i命令查看视频基本信息 ffmpeg -i example2.mp4 ffmpeg version 6.1-essentials_build-www.gyan.dev Copyright (c) 2000-2023 the FFmpeg developersbuilt with gcc 12.2.0 (Rev10, Built by MSYS2 project)configuration: --enable-gpl --enable…...
详细分析Java中的Date类以及格式转换
目录 前言1. 基本知识2. 格式化输出3. 格式转换 前言 记录这篇文章的缘由,主要是涉及一个格式转换,对此深挖了这个类 在Java中,Date类是用于表示日期和时间的类。 位于java.util包中,是Java平台中处理日期和时间的基本类之一。…...
【计算机网络】应用层——HTTP 协议(一)
个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【网络编程】 本专栏旨在分享学习计算机网络的一点学习心得,欢迎大家在评论区交流讨论💌 目录 一、什么是 HTTP 协…...
线程和进程的区别
Java面试题 线程和进程的区别 进程是操作系统资源分配的基本单位。 线程是处理器任务调度和执行的基本单位 一个进程可以包含多个线程。进程之间的资源是相互独立,而同一进程下的线程之间可以共享进程中的资源。...
proxy 代理的接口报错301问题
项目系统里仅仅这个接口报错,反向代理错误导致。 默认情况下,不接受运行在HTTPS上,且使用了无效证书的后端服务器。如果你想要接受,修改配置:secure: false(简单意思:如果本地没有进行过https相…...
mysql进阶-执行计划
目录 1. 概念 2. 使用 3. 具体相关字段含义 3.1 id 3.2 select_type 3.3 table 3.4 partition 3.5 type 3.6 possible_key 3.7 key 3.8 key_len 3.9 ref 3.10 row 3.11 filtered 3.12 extra 1. 概念 一条语句通过优化器之后,会生成具体的执行计划用…...
【UE5】第一次尝试项目转插件(Plugin)的时候,无法编译
VS显示100条左右的错误,UE热编译也不能通过。原因可能是[名字.Build.cs]文件的错误,缺少一些内容,比如说如果要写UserWidget类,那么就要在 ]名字.Build.cs] 中加入如下内容: public class beibaoxitong : ModuleRules …...
MeterSphere本地化部署实践
项目结构 搭建本地环境 安装JDK11,配置好JDK环境,系统同时支持JDK8和JDK11安装IEAD,配置JDK环境配置maven环境,IDEA配置(解压可以直接使用)无限重置IDEA试用期配置redis环境(解压可以直接使用) 配置kafka环境 安装mysql-5.7环境ÿ…...
巨变!如何理解中国发起的“数据要素X”计划?
作者 张群(赛联区块链教育首席讲师,工信部赛迪特聘资深专家,CSDN认证业界专家,微软认证专家,多家企业区块链产品顾问)关注张群,为您提供一站式区块链技术和方案咨询。 刘烈宏在第25届北大光华新…...
CS8370错误,这是由于使用了C# 7.3中不支持的功能
目录 背景: 第一种方法: 第二种办法: 背景: 在敲代码的时候,程序提示报错消息提示:CS8370错误,那么这是什么原因导致的,这是由于使用了C# 7.3中不支持的功能,不支持该功能,那就是版本太低我们就需要升级更高的版本&…...
Raspbian安装云台
Raspbian安装云台 1. 源由2. 选型3. 组装4. 调试4.1 python3-print问题4.2 python函数入参类型错误4.3 缺少mjpg-streamer可执行文件4.4 缺失编译头文件和库4.5 python库缺失4.6 图像无法显示,但libcamera-jpeg测试正常4.7 异常IOCTL报错4.8 Git问题 5. 效果5.1 WEB…...
无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...
苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...
Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?
在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...
NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合
在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...
QT3D学习笔记——圆台、圆锥
类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体(对象或容器)QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质(定义颜色、反光等)QFirstPersonC…...
规则与人性的天平——由高考迟到事件引发的思考
当那位身着校服的考生在考场关闭1分钟后狂奔而至,他涨红的脸上写满绝望。铁门内秒针划过的弧度,成为改变人生的残酷抛物线。家长声嘶力竭的哀求与考务人员机械的"这是规定",构成当代中国教育最尖锐的隐喻。 一、刚性规则的必要性 …...
海云安高敏捷信创白盒SCAP入选《中国网络安全细分领域产品名录》
近日,嘶吼安全产业研究院发布《中国网络安全细分领域产品名录》,海云安高敏捷信创白盒(SCAP)成功入选软件供应链安全领域产品名录。 在数字化转型加速的今天,网络安全已成为企业生存与发展的核心基石,为了解…...
leetcode73-矩阵置零
leetcode 73 思路 记录 0 元素的位置:遍历整个矩阵,找出所有值为 0 的元素,并将它们的坐标记录在数组zeroPosition中置零操作:遍历记录的所有 0 元素位置,将每个位置对应的行和列的所有元素置为 0 具体步骤 初始化…...
