在C语言学习的时候,我跟随的是中国大学慕课平台中浙江大学翁凯教授的“C语言程序设计”课程,在跟随视频学习的时候我发现老师时常在在课程中提到占位符。却没有系统具体地介绍过。于是特地搜集汇总如下:
定义:
定义:占位符是在C语言开发中负责格式化输出的特殊字符。
下面来看一种常用的格式化例子。
#include <stdio.h>
int main(){
int amount = 0;
int price = 0;
printf("请输入金额(元):");
scanf("%d",&price);
printf("请输入票面(元):");
scanf("%d",&amount);
int change = amount - price;
printf("找您%d元",change);
return 0;
}
在这个处理找零的程序中,“%d”就是一个占位符,用于在printf函数输出时先占一个位置,在等待变量的具体的值的输入。
但是占位符有具体的格式限定,比如刚才的代码中之所以用“%d”是因为变量amount,price都是int类型的。
那么,不同的变量类型都对应什么占位符呢?
C语言占位符汇总:
占位符 | 占位符的具体格式 |
%d,%i | 整数 |
%f | 浮点数 |
%p | 指针 |
%fL | 长log |
%e | 科学计数 |
%g | 小数或科学计数 |
%a,%A | 读入一个浮点值(仅C99有效) |
%c | 读入一个字符 |
%d | 读入十进制整数 |
%i | 读入十进制,八进制,十六进制整数 |
%o | 读入八进制整数 |
%x,%X | 读入十六进制整数 |
%s | 读入一个字符串,遇到空格、制表符或换行符结束。 |
%f,%F,%e,%E,%g,%G | 用来输入实数,可以用小数或者指数形式输入 |
%u | 读入一个无符号十进制整数 |
%n | 至此已读入值的等价字符串 |
%[] | 扫描字符合集 |
%% | 读%符号 |
但是总结了那么多占位符的用法,我却不能很好地理解其中一些占位符的意思,我将其中的一些用红色标记了出来,准备探索具体的用法。
部分占位符具体用法:
1."%c","%s"和"%n"的区别辨析:
%c在C语言中代表字符型格式符。
%s在C语言中代表字符串型格式符。
说了等于没说,我们放到代码中具体看一下:
#include <stdio.h>
int main()
{
char c = 'A';
printf("用占位符输出一个字符:%c\n",c);
char s[] = "字符串";
printf("用占位符输出一个字符串:%s\n",s);
return 0;
}
看一下输出:
基本懂了,在附上一些字符和字符串的区别作为参考资料。
1.C语言中字符定义为一种基本数据类型(char),表示单个字符;字符串不是基本数据类型,但可以通过char的数组代替,末尾用’\0’结束。
2.字符串一定是一个char型数组,但是char型数组不一定是字符串;char型数组和字符串的 区别就是是否在末尾处有‘\0’。
3.char是一个单独的字符,在32位系统中占用1个字节的存储空间;字符串是固定长度的连续空间(实际上就是数组的定义)。
下面来看更加复杂的"%n":
1.%n与其他格式说明符号不同。%n不向printf传递格式化信息,而是令printf把自己到该点已 打出的字符总数放到相应变元指向的整形变量中。因此%n对于的变元必须是整形指针。
2.对printf调用返回之后,%n对于变元指向的变量中将包含有一个整数值,表示出现%n时已经由该次printf调用输出的字符数。
看不懂,直接上代码:
#include <stdio.h>
int main()
{
int count = 0;
printf("this%n is a test\n",&count);
printf("%d",count);
return 0;
}
这段代码的输出很有意思,我们来看一下:
结合资料和代码了解到:%n是一个特殊的格式说明符,它不打印某些内容,printf() 统计出现在 %n 之前的字符数,并将该值赋值给参数变量。
2.%[]的用法:
%[]一般只用在scanf函数中用于格式控制符。让我们举个例子:
如果我要只读入小写字母的字符串,这个问题要如何通过scanf函数解决呢?
这里就考虑用到%[]这个格式控制符,它支持a-z这样的格式控制:
char s[];
scanf("%[a-z]",s);
除此之外,%[]还有很多进阶的用法,大家可以参考下面的链接:
scanf格式控制符之%[]的应用 这篇博客写的很好,这里不再赘述。
结语:
第二篇博客,多多包涵❥(^_-)