占位符在编程中的应用:从熟悉到实践的过程
[id_200404729]
• %A :⼗六进制浮点数,字⺟输出为⼤写。
• %c :字符。
• %d :⼗进制整数。
使用科学计数法的浮点数,其指数部分的 e 是小写的。
使用科学计数法的浮点数中,其指数部分的 E 是大写的。
• %i :整数,基本等同于 %d 。
• %f 表示小数,其中包含 float 类型和 double 类型。
• %g :这是一个具有 6 个有效数字的浮点数。当它的整数部分一旦超过 6 位时,就会自动转变为科学计数法,其中包含指数部分的 e 。
为⼩写。
%G 等同于 %g ,其唯一的区别在于指数部分的 E 是大写的。
• %hd :⼗进制 short int 类型。
• %ho :⼋进制 short int 类型。
• %hx :⼗六进制 short int 类型。
• %hu :unsigned short int 类型。
• %ld :⼗进制 long int 类型。
• %lo :⼋进制 long int 类型。
• %lx :⼗六进制 long int 类型。
• %lu :unsigned long int 类型。
• %lld :⼗进制 long long int 类型。
• %llo :⼋进制 long long int 类型。
• %llx 为十六进制的 long long int 类型。
%llu 属于 unsigned long long int 这种类型。
科学计数法所表示的是 long double 类型的浮点数,即 %Le 。
• %Lf :long double 类型浮点数。
%n 表示已输出的字符串数量,此占位符自身不会输出,只是将值存储在指定的变量里。
• %o :⼋进制整数。
• %p :指针(⽤来打印地址)。
• %s :字符串。
• %u :⽆符号整数(unsigned int)。
• %x :⼗六进制整数。
• %zd : size_t 类型。
• %% :输出⼀个百分号。
这些占位符自然需要我们在后续的编程过程中逐步去熟悉,如今一下子全部记住显然是不现实的。随着对代码学习的不断深入,我们会逐渐将这些占位符运用起来。接下来我将列举几个我们平时较为常用的占位符,如下:
#include
int main()
{
使用 printf 函数输出,格式为 "%5d\n",输出的内容为 123,输出结果为 " 123"
return 0;
}
我们能看到这里使用的占位符是%d。接着就出现了一个问题,为何前面还要多一个数字 5 呢?这个数字 5 实际上代表着位置。例如,现在输入 123,就会有五种格式来输入这个数,其运行结果如下:
这个时候,我们只需在数字前面加一个负号(-)就可以了。代码如下:
#include
int main()
{
使用 printf 函数输出一个整数,宽度为 5 且右对齐,输出的整数为 123,输出的格式为 "%-5d\n"
return 0;
}
我们看一下运行结果,如下:
我们可以看到,此时代码已处于左对齐状态。实际上,后面还有 2 个空位。接着又出现了一个问题,即前面加数字的作用是什么呢?接下来我们来讲第二个占位符,%f。这个占位符用于显示小数。如果后面的格式不够,此时就会自动进行补充,例如:
#include
int main()
{
使用"f\n"格式输出 123.8888857656564646 这个数值。
return 0;
}
这个输出的结果就是前十二位,运行结果就不在这里展示了
在默认情况下,printf()不会显示+,而是会显示-。因此,如果想要输出负数,就需要在 d 的前面加上负号。
#include
int main()
{
使用 printf 函数输出一个整数,该整数前面带有正号,输出的整数为 13,输出格式为 "%+d\n"
使用 printf 函数输出 -13,格式为 "%+d\n" ,即输出带符号的十进制数并换行。这里输出的数为 -13 。
return 0;
}
刚才说的是对数字按限定位数输出,接下来要说的是限制小数点后的位数,情况如下:
#include
int main()
{
使用 printf 函数输出一个浮点数,保留两位小数,数值为 0.5,输出的格式为 "Number is %.2f\n"
return 0;
}
这段代码的含义是小数点后有两位。不过在我们所举的这个例子当中,小数位数不到两位。
我们学到了两种方式,一种是对数字的长度进行限制,另一种是对小数点后的位数进行限制。那么将这两种方式结合起来该如何使用呢?就是既要限制数字的长度,又要限制数字的宽度,具体如下:
// 输出为 " 0.50"
#include
int main()
{
printf("%6.2f\n", 0.5);
return 0;
}
“%6.2f\n”意味着对输出的数字进行长度限制,其长度为 6 位,小数点后有 2 位。当然,这两个限制长度也可以用*来表示,具体如下:
#include
int main()
{
printf("%*.*f\n", 6, 2, 0.5);
return 0;
}
它的结果等同于上一个代码的结果。
二丶scanf(输入)语句的用法
当定义了数值输出后,我们能够使用 printf 函数来进行数值输出。此时,我们会思考,将定义的数值改变一行是否可行呢?我们先输入想要输入的数值,然后再进行输出,那该怎么做呢?这时出现了一个心函数,也就是我们要讲的 scanf 函数,如下:
#include
2
3 int main()
4 {
5 int score = 0;
6 printf("请输成绩:");
7 scanf("%d", &score);
8 printf("成绩是:%d\n", score);
9 return 0;
10 }
这个时候我们输入一个数字,运行之后,电脑屏幕会显示出结果。显示的结果如下:
运行出来之后是这样,然后我们再继续输入数值回车,如下:
这个代码的结果已经呈现出来了。那么这其中蕴含着怎样的原理呢?下面有一张结构图,让我们进一步仔细地去理解它吧。
现在已经掌握了 scanf 的基本原理,接下来就是关于 scanf 函数的用法。scanf 函数是用于读取键盘输入的,当程序运行到这个语句时会停下来,等待用户输入。用户输入后按下回车键,scanf 函数就会处理刚才输入的内容。它的用法与 printf 相似,但要注意,printf 字符前没有&,例如:
1 scanf("%d", &i);
如果输入多个变量,如下:
使用 scanf 函数,分别读取一个整数、一个整数、一个浮点数和一个浮点数,并将它们分别存储到变量 i、j、x 和 y 中,读取的格式为 "%d%d%f%f" 。
scanf 函数在处理数值占位符时,会自动把空白字符过滤掉,像空格、制表符、换行符等这些都能被过滤掉。因此,我们在输入时不会影响对 scanf 数据的解读。不过,若 scanf 返回成功,就会出现变量数;若失败,就会出现没有任何项的情况,或者匹配失败并返回 0。