20240726嵌入式学习笔记

目录

数据输入和输出

getchar/putchar

int getchar(void);

int putchar(int a);

scanf/printf

int printf("const char *format", ... );

格式控制字符串

输出参数列表

int scanf(const char* restrict format, ...);

辅助控制符


 

vim编辑器补充拓展

在命令模式下输入 "SHIF"+"V" 进入visual block模式,可以通过光标选中不同行;在命令模式下输入 "CTRL"+"V" 同样可以进入visual block模式,但区别是可以通过光标对单独的列进行选中。

数据输入和输出

输入:从输入设备到计算机内存

输出:从计算机内存到输出设备

实现输入输出功能需要使用到标准输入输出库(stdio.h)中的函数。

库中提供的几个用于输入输出的函数:

//用于获取和打印单个字符
getchar()
putchar()
//用于获取和打印字符串
gets()
puts()
//用于格式化获取和输出内容
scanf()
printf()

getchar/putchar

int getchar(void);

getchar函数具有返回值,其值为获取到的字符的ascii码值。可以利用返回值对变量进行赋值:

int ret;
ret = getchar();

int putchar(int a);

putchat函数同样具有返回值,其值为输出的字符的ascii码值;若输出失败,返回值为 -1.

scanf/printf

int printf("const char *format", ... );

printf函数有返回值,其值内容为输出的数据的个数。

printf函数的形式参数分为两部分:

双引号中的const char *format为格式控制字符串;省略号部分为输出参数列表。

int printf("格式控制字符串",输出参数列表);
格式控制字符串

格式控制字符串对输出内容的格式进行约束。其中的普通字符直接原样输出,占位符则需要与输出参数列表进行匹配。

对于整型变量有多种占位符可供使用:%d(转换为有符号十进制形式)、%u(转换为无符号十进形式)、%o(转换为八进制形式)、%x(转换为十六进制形式)、%X(转换为大写十六进制形式)。

printf("a = %d , b = %u , c = %o , d = %x",-1,-1,-1,-1);
//输出结果
a = -1 , b = 4294967295 , c = 37777777777 , d = ffffffff

对于浮点型变量占位符有三种形式:%f(转换为十进制小数形式,默认保留六位小数)、%e(转换为科学计数法形式)、%g(转换为简洁形式,省略无意义的零)。

printf("a = %f , b = %e , c = %g",12.34,12.34,12.34);
//输出结果
a = 12.340000 , b = 1.234000e+01 , c = 12.34

对于字符型变量,占位符主要有两种形式:%c(转换为字符形式)和%s(转换为字符串形式)。

在格式控制字符中,占位符起到了主要的控制格式的作用。其中辅助控制符也发挥了重要作用

printf("x = K%M.Nxxx",xxx);

辅助控制符有以下形式:

#:出现在%后的井号#表示将输出内容以特殊进制形式显示,如:%#x将内容转换为十六进制;%#o将内容转换为八进制。

printf("%#x , %#o\n",10,10);
//输出内容
0xa , 012

M:占位符中的整数M代表输出的内容的宽度,若输出内容宽度大于整数M,按照实际宽度进行显示;若宽度小于整数M,则显示内容向右对齐,在空位补空格。

-M:类似于辅助控制符M,-M表示显示内容左对齐,空位补空格。

0M:显示内容右对齐,在空位补0。

注意!

没有 "-0M"形式的辅助控制符。(左对齐,空位补零会影响数值大小)

printf("%4d , %04d , %-4d\n",2,2,2);
//输出内容
   2 , 0002 , 2

N:跟在小数点后的整数N表示显示内容保留N位。

printf("%.3f , %.3e , %.3s",12.3456,12.3456,"abcdef");
//输出内容
12.346 , 1.235e+01 , abc

K:转换为对应数据类型的格式,l(long)、ll(long long)、h(half)、hh(half half)。

输出参数列表

输出参数列表按照从左向右的顺序进行匹配,若格式说明符数量小于参数数量没有被匹配的参数被忽略,若格式说明符数量大于参数数量,则缺少匹配的格式说明符对应随机值。

printf("%d %d %d\n",1,2,3);
printf("%d %d %d\n",1,2);
//输出内容
1 2 3
1 2 0

int scanf(const char* restrict format, ...);

int scanf("格式控制字符串",地址列表);

scanf函数有返回值,其值内容为输入的数据的个数。

scanf函数也有辅助控制符部分,相比printf函数,内容较少但更为复杂

辅助控制符
scanf("%MK",xxx);

M:控制输入数据的宽度,超出宽度的部分被忽略。

K:控制输入数据的精度,有以下几种形式

%f(float类型)、%lf(double类型)、%Lf(long double类型)、%ld(long类型)、%lld(long long 类型)。

需要注意的是,scanf函数格式控制字符中尽量不要出现普通字符,当出现普通字符时,只有输入与普通字符匹配才能获取格式说明符匹配的数据。

scanf("abc%d",&a);
printf("%d\n",a); 
//输入:1234\n
//输出结果:32767
//输入:abc5\n
//输出结果:5

scanf函数中的空白符:空格、制表符、回车

在输入时遇到空白符,匹配结束;输入与格式不匹配,即非法字符,匹配结束;输入超过指定长度,匹配结束。

scanf("%d",&a);
printf("a = %d\n",a);
//输入:w\n
//输出内容:a = 32767
scanf("%c%d",&a,&b);
printf("a = %c\nb = %d\n",a,b);
//输入:w[space]w\n
//输出结果:
a = w
b = 32764
scanf("%3d",&a);
printf("a = %d\n",a);
//输入:12345
//输出结果:a = 123

注意!

在格式控制字符中出现空白符,表示此处可以输入多个空白符,但不会将数据传入任何一个变量中。

%*c表示在输入中匹配一个数据,但该数据不产生作用。

  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值