Skip to content

C

problems#

#problem With MacOS 10.15.6 + VScode + Code ruuner extension the sleep() in C, pauses the stdio.h. and cannot answer getchar().

syntax#

storage classes#

auto register static extern : imported , external variables

pointer#

pointer(var type) is for saving Address. like int is for saving numbers. Address is the location of a variable in RAM.

* varname->pointer: get the variable at the address of the pointer / define pointer & pointer->varname: get the address of the variable.

pointer of Array is like iterate, pointer++ can traverse the array.

main function#

returns 0:

The return value for main indicates how the program exited. Normal exit is represented by a 0 return value from main. Abnormal exit is signaled by a non-zero return, but there is no standard for how non-zero codes are interpreted. As noted by others, void main() is prohibited by the C++ standard and should not be used. The valid C++ main signatures are:

Source

spaces#

space, tab, enter, comment /*comment*/ are all seen as spaces. So, int/*thing*/main() this is legit.

constants (const)#

使用 #define 预处理器。使用 const 关键字。 整数常量也可以带一个后缀,后缀是 U 和 L 的组合,U 表示无符号整数(unsigned),L 表示长整数(long)。后缀可以是大写,也可以是小写,U 和 L 的顺序任意。0xFeeL /* 合法的 */

printf#

转换说明符#

作为结果的打印输出

转换说明 输出
%a 浮点数、十六进制数字和 p-记数法 (C99)
%A 浮点数、十六进制数字和 P-记数法 (C99)
%c 一个字符
%d 有符号十进制整数
%e 浮点数、e-记数法
%E 浮点数、E-记数法
%f 浮点数,十进制记数法
%g 根据数值不同自动选择%f 或者%e。%e 格式在指数小于-4 或者大于等于精度时使用
%G 根据数值不同自动选择%f 或者%E。%E 格式在指数小于-4 或者大于等于精度时使用
%i 有符号十进制整数 (与%d 相同)
%o 无符号八进制整数
%p 指针(就是指地址)
%s 字符串
%u 无符号十进制整数
%x 使用十六进制数字 0f 的无符号十六进制整数
%X 使用十六进制数字 0F 的无符号十六进制整数
%% 打印一个百分号

修饰符#

五种标志 (-、+、空格、#和 0)都将在表三中描述,

修饰符 意义 标志 示例
digit(s) 字段宽度的最小值。 如果该字段不能容纳要打印的数或者字符串,系统会使用更宽的字段。 M
.digit(s) 精度。对于%g 和%G 转换,是有效数字的最大位数。
对于%e、%E 和%f 转换,是将要在小数点的右边打印的数字的位数。
对于%s 转换,是将要打印的字符的最大数目。
对于整数转换,是将要打印的数字的最小位数;如果必要,要使用前导零来达到这个位数。
.digit(s) 只使用.表示其后跟随一个零,所以%.f 与%.0f 相同。 %5.2f打印一个浮点数,字段宽度为 5 个字符,小数点后有两个数字。
h 和整数转换说明符一起使用,表示一个 short int 或者 unsigned short int 类型数值。 %hu , %hx,%6.4hd
hh 和整数转换说明符一起使用,表示一个 signed char 或者 unsigned char 类型数值。 %hhu , %hhx,%6.4hhd
j 和整数转换说明符一起使用,表示一个 intmax_t 或 uintmax_t 值。 %jd,%8jX
l 和整数说明符一起使用,表示一个 long int 或者 unsigned long int 类型值。 %ld,%8lu
ll 和整数说明符一起使用,表示一个 long long int 或 unsigned long long int 类型值 (C99)。 %lld,%8llu
L 和浮点转换说明符一起使用,表示一个 long double 值。 %Lf,.4Le
t 和整数转换说明符一起使用,表示一个 ptrdiff_t 值(与两个指针之间的差相对应的类型) (C99) %td,ti
z 和整数转换说明符一起使用,表示一个 size_t 值(sizeof 返回的类型) (C99)。 %zd,zx

标志#

可以使用零个或多个标志

修饰符 意义
- 项目是左对齐的,也就是说,会把项目打印在字段的左侧开始处。示例:“%-20s”
* 有符号的值若为正,则显示带加号的符号;若为负,则带减号的符号。示例:“%+6.2f”
(空格) 有符号的值若为正,则显示时带前导空格(但是不显示符号);若为负,则带减号符号。+标志会覆盖空格标志。示例:“% 6.2f”
# 使用转换说明的可选形式。若为%o 格式,则以 0 开始;若为%x 和%X 格式,则以 0x 或 0X 开始,对于所有的浮点形式,
# 保证了即使不限任何数字,也打印一个小数点字符。对于%g 和%G 格式,它防止尾随零被删除。示例:“%#o”、“%#8.0f”和“%+#10.3E”
0 对于所有的数字格式,用前导零而不是用空格填充字段宽度。如果出现-标志或者指定了精度(对于整数)则忽略该标志。示例:“0d”和“.3f”

scanf#

转换说明符#

ANSIC 中

转换说明符 意义
%c 把输入解释成一个字符
%d 把输入解释成一个有符号十进制整数
%e,%f,%g,%a 把输入解释成一个浮点数(%a 是 C99 标准)
%E,%F,%G,%A 把输入解释成一个浮点数 (%A 是 C99 标准)
%i 把输入解释成一个有符号十进制整数
%o 把输入解释成一个有符号八进制数
%p 把输入解释成一个指针(地址)
%s 把输入解释成一个字符串;输入的内容以一个非空白字符作为开始,并且包含知道下一个空白字符的全部字符
%u 把输入解释成一个无符号十进制整数
%x,%X 把输入解释成一个有符号十六进制整数

转换修饰符#

转换修饰符 意义
* 滞后赋值。示例:“%*d”
digit(s) 最大字段宽度;在达到最大字段宽度或者遇到第一个空白字符时(不管哪一个先发生都一样)停止对输入项的读取。示例:“s”
hh 把整数读作 signed char 或 unsigned char 。示例:“%hhd”“%hhu”
ll 把整数读作 long long 或者 unsigned long long (C99)。示例:“%lld”“%llu”
h,l 或 L “%hd”和“hi”指示该值将会存储在一个 short int 中。
“%ho”“%hx”和“%hu” 指示该值将会存储在一个 unsigned short int 中。
“%ld”和“%li” 指示该值将会存储在一个 long 中。
“%lo”“%lx”和“%lu” 指示该值将会存储在一个 unsigned long 中。
“%le”“%lf”和“%lg” 指示该值以 double 类型存储。将 L(而非 l)与 e、f 和 g 一起使用指示该值以 long double 类型存储。

如果没有这些修饰符,d、i、o 和 x 指示 int 类型,而 e、f 和 g 指示 float 类型。