创建项目–空项目(名称、目录)–工程
源文件–v++(hello.c)–敲代码
代码展示:
#include//包含头文件 input output #include //编程规范 //注释 源文件 //入口代码 int main(int argc, char* argv[]) { print("hello worldn");// n是转义字符 换行的意思 return 0; }
代码效果图:
2、数据类型 2.1 变量 2.1.1 变量在程序运行过程中,其值可以改变
变量在使用前必须先定义,定义变量前必须有相应的数据类型
标识符不能是关键字
标识符只能由字母、数字、下划线组成
第一个字符必须为字母或下划线
标识符中字母区分大小写
变量在编译时为其分配相应的内存空间
可以通过其名字和地址访问相应内存
匈牙利命名法是一种编程时的命名规范。基本原则是:变量名=属性+类型+对象描述,其中每一对象的名称都要求有明确含义,可以取对象名字全称或名字的一部分。要基于容易记忆容易理解的原则。
变量属性:
属性部分:
g_ 全局变量
c_ 常量
m_ c++类成员变量
s_ 静态变量
类型部分:
数组 a
指针 p
函数 fn
无效 v
句柄 h
长整型 l
布尔 b
浮点型(有时也指文件) f
双字 dw
字符串 sz
短整型 n
双精度浮点 d
计数 c(通常用cnt)
字符 ch(通常用c)
整型 i(通常用n)
字节 by
字 w
实型 r
无符号 u
描述部分:
最大 Max
最小 Min
初始化 Init
临时变量 T(或Temp)
源对象 Src
目的对象 Dest
举例
hwnd : h 是类型描述,表示句柄, wnd 是变量对象描述,表示窗口,所以 hwnd 表示窗口句柄;
pfnEatApple : pfn 是类型描述,表示指向函数的指针, EatApple 是变量对象描述,所以它表示指向 EatApple 函数的函数指针变量。
g_cch : g_ 是属性描述,表示全局变量,c 和 ch 分别是计数类型和字符类型,一起表示变量类型,这里忽略了对象描述,所以它表示一个对字符进行计数的全局变量。
| 数据类型 | 占用空间 | 数据范围 | |
|---|---|---|---|
| char | 字符型 | 1字节 | -128 ~ 127 |
| short/short int | 短整型 | 2字节 | -32768 ~ 32767 |
| int | 整型 | 4字节 | -2147483648 2147483647 |
| long/long int | 整型 | 4字节 | -2147483648 2147483647 |
| long long/long long int | 长整型 | 8字节 | -2^64/2 ~ 2^64/2-1 |
| unsigned char | 无符号字符型 | 1字节 | 0 ~ 255 |
| unsigned short/short int | 无符号字符型 | 2字节 | 0 ~ 65536 |
| unsigned int | 整型 | 4字节 | 0 ~ 4294967296 |
| unsigned long/long int | 整型 | 4字节 | 0 ~ 4294967296 |
| unsigned long long/long long int | 长整型 | 8字节 | 0 ~ 2^64-1 |
| float | 单精度浮点型 | 4字节 | |
| double | 双精度浮点型 | 8字节 |
printf 格式化输出数据到标准输出设备
scanf 从标准输入设备格式化输入数据到变量
#include3.2类型字段字符int main() { int b; printf("请输入b的值:"); scanf("%d", &b); printf("b = %dn", b); return 0; }
| 类型字符 | 参数 | 输出格式 |
|---|---|---|
| c | 字符 | 与 printf 函数一起使用时,指定单字节字符;与 wprintf 函数一起使用时,指定宽字符。 |
| C | 字符 | 与 printf 函数一起使用时,指定宽字符;与 wprintf 函数一起使用时,指定单字节字符。 |
| d | Integer | 带符号十进制整数。 |
| i | Integer | 带符号十进制整数。 |
| o | Integer | 无符号八进制整数。 |
| u | Integer | 无符号十进制整数。 |
| x | Integer | 无符号十六进制整数;使用 " abcdef "。 |
| X | Integer | 无符号十六进制整数;使用 " ABCDEF "。 |
| e | 浮点 | 格式为 [-] e± [ ]的有签名值,其中 是一个十进制数字,是一个或多个十进制数字,具体取决于指定的精度,或者默认为六位 d.ddddd.dddddddddddddd ,[ d ]*dd*是两个或三个十进制数字,具体取决于输出格式和指数的大小。 |
| E | 浮点 | 与 格式 e 相同,只不过 E 而不是 e 引入了指数。 |
| f | 浮点 | 格式为 [-] .的有签名值 dddddddddddd , dddd 其中 是一个或多个十进制数字。 小数点前的数字位数取决于数字的度量值,小数点后的数字位数取决于请求的精度,或为默认的六位数。 |
| F | 浮点 | 与 格式相同 f ,只不过无穷大和 nan 输出大写。 |
| g | 浮点 | 有签名值以 f 或 e 格式显示,以更精简的给定值和精度为准。 只有当值的指数小于 -4 或大于或等于精度参数时,才 e 使用 e 。 截去尾随零,仅当后跟一个或多个数字时,才会显示小数点。 |
| G | 浮点 | 与 格式 g 相同,只不过 在适用位置引入指数 E****e (() )。 |
| a | 浮点 | 采用*[-]0xh.hhhh*p±格式的有签名十六进制双精度浮点值,其中 h.hhhh是十六进制数字 (使用小写字母) 作为指数的一个或多个数字。 精度指定此点后的数字位数。 |
| A | 浮点 | 采用*[-]0Xh.hhhhP±格式的有签名十六进制双精度浮点值,其中 h.hhhh是十六进制数字 (使用大写字母) 表示指数,dd*是指数的一个或多个数字。 精度指定此点后的数字位数。 |
| n | 指向整数的指针 | 目前成功写入流或缓冲区的字符数。 此值存储在地址作为自变量的整数中。 可通过参数大小规范前缀控制指向的整数的大小。 n 说明符默认为禁用;请参阅重要的安全说明了解相关信息。 |
| p | 指针类型 | 以十六进制数字显示参数作为地址。 |
| s | String | 与 printf 函数一起使用时,指定单字节或多字节字符串;与 wprintf 函数一起使用时,指定宽字符字符串。 将于第一个空字符之前或达到精度值时显示字符。 |
| S | String | 与 printf 函数一起使用时,指定宽字符字符串;与 wprintf 函数一起使用时,指定单字节或多字节字符串。 将于第一个空字符之前或达到精度值时显示字符。 |
| Z | ANSI_STRING 或 UNICODE_STRING 结构 | 将 或 结构的地址作为参数传递时,显示结构字段指向的缓冲区 Buffer 中包含的字符串。 使用 大小 修饰符前缀 来指定 UNICODE_STRING 例如的参数 —%wZ 。 结构的 Length 字段必须设置为字符串的长度(以字节为单位)。 结构的 MaximumLength 字段必须设置为缓冲区的长度(以字节为单位)。 通常, Z 只能在使用转换规范的驱动程序调试函数(如和)中使用类型字符 dbgPrint``kdPrint 。 |
| 标志 | 含义 | 默认 |
|---|---|---|
| - | 在给定的字段宽度内左对齐结果。 | 右对齐。 |
| + | 如果输出值为有符号类型,请使用符号 (+ 或-) 为其加上前缀。 | 只对有符号的负值 (-) 显示符号。 |
| 0 | 如果 width 的前缀为 ,则将添加前导零,直到达到最小宽度。 如果 0 和都 - 出现, 0 则忽略。 如果 0 为整数格式指定了, (、、、、 iuxXo 、 d) 和精度规范也存在,则 —%04.d—0 将忽略。 如果 0 为 a 或浮点格式指定了,则在 A 或前缀之后为尾数预置前导零 0x``0X 。 | 不填充。 |
| 空白 ( “” ) | 如果输出值已签名且为正值,则使用空值作为其前缀。 如果空白和 + 标志同时出现,空白则将被忽略。 | 没有显示空白。 |
| # | 当它与 o 、或格式一起使用时 x****X ,标志将 # 分别使用 0 、 0x 或 0X ,以作为任何非零输出值的前缀。 | 不显示前缀。 |
| 当它与 e 、 E 、、、或格式一起使用时 fFa****A ,标志将 # 强制输出值包含小数点。 | 仅当小数点后紧跟数字时,才会显示小数点。 | |
| 当它与或格式一起使用时 g****G , # 标志将强制输出值包含小数点,并防止截断尾随零。 与 c 、、 d****i 、 u 或一起使用时,将被忽略 s 。 | 仅当小数点后紧跟数字时,才会显示小数点。 尾随零将被截断。 |
| 类型 | 含义 | 默认 |
|---|---|---|
| a, A | 精度指定此点后的数字位数。 | 默认精度为 13。 如果精度为 0,除非使用 # 标志,否则不会打印小数点。 |
| c, C | 精度不产生任何影响。 | 打印字符。 |
| d, i, o, u, x, X | 精度指定要打印的最小数字位数。 如果参数中的数字位数小于精度,则将在输出值的左侧使用零进行填充。 当位数超过 精度时,该值不会被截断。 | 默认精度为 1。 |
| e, E | 精度指定此小数点后要打印的数字位数。 打印的最后一位数舍入。 | 默认精度为 6。 如果 精度 为0,或者该时间段 () 出现时不包含数字,则不会打印小数点。 |
| f, F | 精度值指定此小数点后的数字位数。 如果出现小数点,则在它之前至少会显示一个数字。 该值舍入为适当数量的数字。 | 默认精度为 6。 如果 精度 为0,或者如果句点 () 出现时没有数字,则不会打印小数点。 |
| g, G | 精度指定打印的最大有效位数。 | 打印六个有效位数,并且任何尾随零都会被截断。 |
| s, S | 精度指定要打印的最大字符数。 不会打印超过精度的字符。 | 输出字符,直到找到空字符。 |
| 若要指定 | 使用前缀 | 及类型说明符 | 备注 |
|---|---|---|---|
| char unsigned char | hh | d、i、o、u、x 或 X | |
| short int short unsigned int | h | d、i、o、u、x 或 X | |
| __int32 unsigned __int32 | I32 | d、i、o、u、x 或 X | 非标函数 |
| __int64 unsigned __int64 | I64 | d、i、o、u、x 或 X | 非标函数 |
| intmax_t uintmax_t | j 或 I64 | d、i、o、u、x 或 X | 非标函数 |
| long double | l (小写 L) 或 L | a、A、e、E、f、F、g 或 G | |
| long int long unsigned int | l(小写 L) | d、i、o、u、x 或 X | |
| long long int unsigned long long int | ll (小写的 LL) | d、i、o、u、x 或 X | |
| ptrdiff_t | t 或 I (大写 i) | d、i、o、u、x 或 X | 非标函数 |
| size_t | z 或 I (大写 i) | d、i、o、u、x 或 X | |
| 单字节字符 | h | c 或 C | |
| 宽字符 | l (小写 L) 或 w | c 或 C | |
| 单字节字符串 | h | s、S 或 Z | |
| 宽字符字符串 | l (小写 L) 或 w | s、S 或 Z |
ptrdiff_t 和 size_t 类型在 32 位平台上为 __int32 或 unsigned __int32,在 64 位平台上为 __int64 或 unsigned __int64。 I (大写 i) 、、 j****t 和 z 大小前缀采用平台的正确参数宽度。
在 Visual C++ 中,虽然 long double 是互异的类型,但是它具有与 double 相同的内部表示形式。
**hc**或 hC 类型说明符与 c 函数中的 printf 和函数中的 C 同义 wprintf 。 lc、 lC 、 wc 或类型说明符与函数中的 wC****Cprintf 和函数的同义词 cwprintf 。 **hs**或 hS 类型说明符与 s 函数中的 printf 和函数中的 S 同义 wprintf 。 ls、 lS 、 ws 或类型说明符与函数中的 wS****Sprintf 和函数的同义词 swprintf 。
备注
特定于 Microsoft 的:
I (大写 i) ,, I32 , I64 和 w 参数大小修饰符前缀是 Microsoft 扩展,不与 ISO C 兼容。 当与类型的数据一起使用时, h 前缀为类型的数据,而与类型的数据一起使用时,则使用前缀 char " l (小写") 前缀 double 。
//使用scanf和printf编写程序按以下格式输入保存到变量并且显示(在代码下面用注释写上格式的作用)
//1.cC
//c 字符 与 printf 函数一起使用时,指定单字节字符;与 wprintf 函数一起使用时,指定宽字符。
//c 字符。 与 scanf 函数结合使用时,指定单字节字符;与 wscanf 函数结合使用时,指定宽字符。
char ch = 0;
printf("Please Input character:");
scanf_s("%c", &ch,1);
printf("ch = %cn", ch);
//C 字符 与 printf 函数一起使用时,指定宽字符;与 wprintf 函数一起使用时,指定单字节字符。
//C 相反大小字符。 与 scanf 函数结合使用时,指定宽字符;与 wscanf 函数结合使用时,指定单字节字符。
wchar_t wc=0;
printf("Please Input character:");
scanf("%C", &wc);
printf("wc = %Cn", wc);
// 2.d
//d Integer 带符号十进制整数。
int nNumber = 0;
printf("Please Input Number:");
scanf_s("%d", &nNumber);//输入带符号十进制整数
printf("nNumber = %dn", nNumber);//输出带符号十进制整数
// 3.i
//scanf->i { 1 }一个整数。{ 2 } 如果输入字符串以“0x”或“0X”开始,则为十六进制;
//如果字符串以“0”开始,则为八进制;其余情况为十进制。
//printf-> i Integer 带符号十进制整数。
int nNumber3 = 0;
printf("Please Input Number:");
scanf_s("%i", &nNumber3);
printf("nNumber3 = %in", nNumber3);
// 4.o
//scanf->o 八进制整数。
//printf->o 无符号八进制整数。
int nNumber4 = 0;
printf("Please Input Number:");
scanf_s("%o", &nNumber4);//输入八进制整数
printf("八进制nNumber4 = 0%on", nNumber4);//输出无符号八进制整数
// 5.u
//u Integer 无符号十进制整数。
int nNumber5 = 0;
printf("Please Input Number:");
scanf_s("%u", &nNumber5);//输入无符号十进制整数
printf("无符号十进制整数nNumber5 = %un", nNumber5);//输出无符号十进制整数
// 6.xX
//x 十六进制整数。 指向 int的指针。
//printf-> x 无符号十六进制整数; 使用 " abcdef "。
//printf-> X 无符号十六进制整数; 使用 " ABCDEF "。
int nNumber6 = 0;
printf("请输入十六进制整数:");
scanf_s("%x", &nNumber6);//输入带符号十六进制整数
printf("nNumber6 = %xn", nNumber6);//输出无符号十六进制整数; 使用 " abcdef "。
int nNumber6_2 = 0;
printf("请输入十六进制整数:");
scanf_s("%X", &nNumber6_2);//输入十六进制整数
printf("nNumber6_2 = %Xn", nNumber6_2);//输出无符号十六进制整数; 使用 " ABCDEF "。
// 7.eE
//e 格式为 [-] e± [ ]的有签名值,其中 是一个十进制数字,是一个或多个十进制数字,具体取决于指定的精度,
//或者默认为六位 d.ddddd.dddddddddddddd ,
//[ d ]dd是两个或三个十进制数字,具体取决于输出格式和指数的大小。
float nNumber7_1 = 0;
printf("请输入浮点数:");
scanf_s("%e", &nNumber7_1);//输入浮点数
printf("nNumber7_1 = %en", nNumber7_1);//输出的浮点型为科学记数法
//E 同上e,格式为 [-] E± [ ]的有签名值
float nNumber7_2 = 0;
printf("请输入浮点数:");
scanf_s("%E", &nNumber7_2);//输入浮点数
printf("nNumber7_2 = %En", nNumber7_2);//输出的浮点型为科学记数法
// 8.fF
//f 浮点 格式为 [-] .的有签名值 dddddddddddd , dddd 其中 是一个或多个十进制数字。
//小数点前的数字位数取决于数字的度量值,小数点后的数字位数取决于请求的精度,或为默认的六位数。
float nNumber8_1 = 0;
printf("请输入浮点数:");
scanf_s("%f", &nNumber8_1);//输入浮点数
printf("nNumber8_1 = %fn", nNumber8_1);//
//F 浮点 与 格式相同 f
float nNumber8_2 = 0;
printf("请输入浮点数:");
scanf_s("%F", &nNumber8_2);//输入浮点数
printf("nNumber8_2 = %Fn", nNumber8_2);//
// 9.gG
//g 浮点 有签名值以 f 或 e 格式显示,以更精简的给定值和精度为准。
// 只有当值的指数小于 -4 或大于或等于精度参数时,才 e 使用 e 。
// 截去尾随零,仅当后跟一个或多个数字时,才会显示小数点。
float nNumber9_1 = 0;
printf("请输入浮点数:");
scanf_s("%g", &nNumber9_1);//输入浮点数
printf("nNumber9_1 = %gn", nNumber9_1);//根据数的进度大小输出科学计数法或者普通计数法
float nNumber9_2 = 0;
printf("请输入浮点数:");
scanf_s("%G", &nNumber9_2);//输入浮点数
printf("nNumber9_2 = %Gn", nNumber9_2);//根据数的进度大小输出科学计数法(E表示)或者普通计数法
// 10.aA
//a 浮点 采用[-]0xh.hhhhp±格式的有签名十六进制双精度浮点值,
// 其中 h.hhhh是十六进制数字(使用小写字母) 作为指数的一个或多个数字。 精度指定此点后的数字位数。
float nNumber10_1 = 0;
printf("请输入浮点数:");
scanf_s("%a", &nNumber10_1);//输入浮点数
printf("nNumber10_1 = %an", nNumber10_1);//采用[-]0xh.hhhh p±格式输出
//A 浮点 采用[-]0Xh.hhhhP±格式的有签名十六进制双精度浮点值,其中 h.hhhh是十六进制数字 (使用大写字母) 表示指数,
//dd是指数的一个或多个数字。 精度指定此点后的数字位数。
float nNumber10_2 = 0;
printf("请输入浮点数:");
scanf_s("%A", &nNumber10_2);//输入浮点数
printf("nNumber10_2 = %An", nNumber10_2);//采用[-]0xh.hhhh P±格式输出
// 11.n
//printf -> n 目前成功写入流或缓冲区的字符数。
//scanf -> n 未从流或缓冲区读取任何输入
int val;
val = _set_printf_count_output(1);
printf("hello %n worldn", &val);//printf目前成功写入流或缓冲区的字符数 val=6
printf("val = %dn", val);
int k;
scanf_s("%d%n",&k, &val);//val= (输入的整数k的位数)
printf("%dn", val);
// 12.p
//p 以十六进制数字显示参数作为地址
int nNumber12 = 0;
printf("请输入一个数:");
scanf_s("%d", &nNumber12);
printf("nNumber12 = %p", nNumber12);//以十六进制输出
// 13.sS
//s String 与 printf 函数一起使用时,指定单字节或多字节字符串;与 wprintf 函数一起使用时,指定宽字符字符串。
//S String 与 printf 函数一起使用时,指定宽字符字符串;与 wprintf 函数一起使用时,指定单字节或多字节字符串。
char str[255];
printf("请输入字符串:");
scanf("%s", str);
printf("str = %sn", str);
char str1[128];
printf("请输入字符串:");
wscanf(L"%S", str1);
wprintf(L"str = %Sn", str1);
// 14.Z
// Z ANSI_STRING 或 UNICODE_STRING 结构 将 或 结构的地址作为参数传递时,显示结构字段指向的缓冲区 //ANSI_STRINGUNICODE_STRINGBuffer 中包含的字符串。 使用 大小 修饰符前缀 来指定 UNICODE_STRING 例如的参数 —%wZ 。
//结构的 Length 字段必须设置为字符串的长度(以字节为单位)。
// 结构的 MaximumLength 字段必须设置为缓冲区的长度(以字节为单位)。
//不会用
// 15. -
//- 在给定的字段宽度内左对齐结果。
char str15[222] = "ABCDEF";
printf("请输入一个字符串:");
scanf_s("%s", str15);
printf("%-10sn", str15);
// 16. +
//+ 如果输出值为有符号类型,请使用符号(+或 - ) 为其加上前缀。
char str16[222] = "ABCDEF";
printf("请输入一个字符串:");
scanf_s("%s", str16);
printf("%+20sn", str16);
// 17.0
// 0:有0表示指定空位填0,如省略表示指定空位不填。
int nNumber17=0;
printf("请输入一个数字:");
scanf_s("%d", &nNumber17);
printf("nNumber17 = %010dn", nNumber17);
// 18.#
//当它与 o 、或格式一起使用时 xX ,标志将 # 分别使用 0 、 0x 或 0X ,以作为任何非零输出值的前缀。
int nNumber17 = 0;
printf("请输入一个数字:");
scanf_s("%d", &nNumber17);
printf("nNumber17 = %#8dn", nNumber17);
printf("nNumber17 = %#8on", nNumber17);
printf("nNumber17 = %#8xn", nNumber17);
// 20.hh
//hh 读取一个字节的数据,长了就会截断,舍弃高位
// char 的范围是 -127 - 0 -128
char ch20;
printf("请输入一个字符:");
scanf_s("%hhd", &ch20);
printf("ch20 = %hhd ", ch20);
// 21.h
//h 读取2个字节的数据,长了就会截断,舍弃高位
//short 的范围是 -32768 - 0 - 32767
short nNumber21 = 0;
printf("请输入一个数字:");
scanf_s("%hd", &nNumber21);
printf("nNumber21 = %hhd ", nNumber21);
// 22.I32
//I32 读取4个字节的数据,长了就会截断,舍弃高位
//int 的范围是 -2147483648 - 0 - 2147483647
int nNumber22 = 0;
printf("请输入一个数字:");
scanf_s("%I32d", &nNumber22);
printf("nNumber22 = %I32d n", nNumber22);
printf("nNumber22 = %I32x n", nNumber22);
// 23.I64
//I64 读取8个字节的数据,长了就会截断,舍弃高位
//long long 的范围是 -9223372036854775808 -0 - 9223372036854775807
char num[256] = { NULL };
printf("请输入一个数字:");
scanf_s("%llx", num);
printf("nNumber23 = %I64dn", num);
printf("nNumber23 = %I64xn", num);
// 24.j
//j 读取8个字节的数据,长了就会截断,舍弃高位
//的范围是 -9223372036854775808 -0 - 9223372036854775807
long long int nNumber24 = 9223372036854775809;
printf("请输入一个数字:");
scanf_s("%jd", &nNumber24);
printf("nNumber24 = %jdn", nNumber24);
printf("nNumber24 = %jxn", nNumber24);
// 25.l(小写的 L)或 L
//long double l (小写 L) 或 L + a、A、e、E、f、F、g 或 G
long double nNumber25 = 0;
printf("请输入一个数字:");
scanf_s("%le", &nNumber25);
printf("nNumber25 = %len", nNumber25);
printf("nNumber25 = %lgn", nNumber25);
// 26.ll(小写的 LL)
long long int nNumber26 = 0;
printf("请输入一个数字:");
scanf("%lld", &nNumber26);
printf("nNumber26 = %lldn", nNumber26);
printf("nNumber26 = %llxn", nNumber26);
// 27.t 或 I(大写的 i)
//typedef int ptrdiff_t
//ptrdiff_t 的范围是 -2147483648 - 0 - 2147483647
ptrdiff_t nNumber27 = 0;
printf("请输入一个数字:");
scanf("%td", &nNumber27);
printf("nNumber27 = %tdn", nNumber27);
printf("nNumber27 = %txn", nNumber27);
printf("nNumber27 = %idn", nNumber27);
printf("nNumber27 = %ixn", nNumber27);
printf("nNumber27 = %Idn", nNumber27);
printf("nNumber27 = %Ixn", nNumber27);
// 28.z 或 I(大写的 i)
//typedef unsigned int size_t;
//size_t 0- 4294967295
size_t nNumber28 = 0;
printf("请输入一个数字:");
scanf("%tu", &nNumber28);
printf("nNumber28 = %tun", nNumber28);
printf("nNumber28 = %tun", nNumber28);
printf("nNumber28 = %Iun", nNumber28);
printf("nNumber28 = %Iun", nNumber28);
printf("nNumber28 = %iun", nNumber28);
printf("nNumber28 = %iun", nNumber28);
// 29.l(小写的 L)或 w
//宽字符字符串 l (小写 L) 或 w s、S 或 Z
wchar_t ch29[222] = {0};
printf("请输入一个字符串:");
wscanf(L"%ls", ch29);
wprintf(L"ch29 = %lsn", ch29);
wchar_t ch29_2[222] = { 0 };
printf("请输入一个字符串:");
wscanf(L"%Ls", ch29_2);
wprintf(L"ch29 = %Lsn", ch29_2);
wchar_t ch29_3[222] = { 0 };
printf("请输入一个字符串:");
wscanf(L"%ws", ch29_3);
wprintf(L"ch29 = %wsn", ch29_3);



