文章目录
前言
相信经过初识C语言的学习,你已经能够写一些简单的程序了,在写代码的过程中你可能就疑问为什么 printf() 能输出,为什么 scanf() 能输入,他们的用法又是什么,今天来详细介绍。
1. 头文件
printf() 和 scanf()都是C语言标准库中的库函数,也就是说使用这两个库函数之前有一用头文件<stdio.h>(输入输出头文件)要做的是在源文件代码开头写上 #include <stdio.h> 。
2. printf()
2.1. 基本用法
printf() 的作用时将参数文本输出在屏幕,它里面的 f 代表 format (格式化),表示可以定制化的输出文本的格式。
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
printf("Hello World"); //会打印 Hello World
return 0;
}
printf() 不会自动在行尾添加换行符,运行结束后,光标就停留在输出结束的地方,不会自动换行。
为了让光标移动到下一行的开头,可以在输出文本的结尾,添加一个换行符\n。
2.2. 占位符
printf() 可以在输出文本中指定占位符。
所谓 “占位符” ,就是这个位置可以用其它值代替。
#include <stdio.h>
int main()
{
printf("These are %d apples\n", 3);
return 0;
}
上面示例中,There are %d apples\n 是输出文本,里面的%d 就是占位符,表示这个位置要用其它值代替换。
占位符的第一个字符一律为百分号(%),第二个字符表示占位符的类型,%d表示这里代入的值必须为一个整数。
printf()的第二个参数就是替换占位符的值,上面的例子是整数 3 替换%d。执行后的输出结果就是There are 3 apples。
printf()参数与占位符是一一对应关系,如果有n个名位符, printf()的参数就应该有 n+1个。如果参数个数少于对应的占位符,printf()可能会输出内存中的任意值。
多个占位符也可以一起使用,如下:
#include <stdio.h>
int main()
{
printf("%d people have %d apples\n");
return 0;
}
下面按照字母顺序,列出常用的占位符,方便查找。(重点记加粗的)
占位符 | 意义 |
---|---|
%a | 十六进制浮点数,字母输出为小写。 |
%A | 十六进制浮点数,字母输出为大写。 |
%c | 字符。 |
%d | 十进制整数。//int |
%e | 使用科学计数法的浮点数,指数部分的e 为小写。 |
%E | 使用科学计数法的浮点数,指数部分的E为大写。 |
%i | 整数,基本等同于%d。 |
%f | 小数(包含 float 类型和 double 类型)。//float -%f double -%lf |
%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 类型。 |
%Le | 科学计数法表示的long double 类型浮点数。 |
%Lf | long double类型浮点数。 |
%n | 已输出的字符串数量。该占位持本身不输出,只将值存储在指定变量之中。 |
%o | 八进制整数。 |
%p | 指针(用来打印地址)。 |
%s | 字符串。 |
%u | 无符号整数(unsigned int)。 |
%x | 十六进制整数。 |
%zd | size_t类型。 |
%% | 输出一个百分号。 |
2.3. 占位符的进阶应用
2.3.1. 限制最小输出长度
#include <stdio.h>
int main()
{
printf("%5d\n",123);//输出" 123"
printf("%3c\n",