1 格式化输入
使用不同的占位符结构,进行各种需求的输入。对应的使用方式如下表所示:
%[flag]type | |
flag | 含义 |
* | 跳过 |
number | 输入最大字符数 |
hh | char |
h | short |
l | long,double |
ll | long |
L | long double |
*号的作用是跳过该输入,例子如下:
#include<stdio.h>
void main(void)
{
int num;
scanf("%*d%d",&num);
printf("%d",num);
}
输入如下所示:
123
456
输出如下所示:
456
即代码跳过了123,将456放进了num的内存中。
用数字来控制输入的字符数在字符串的输入输出章节已有介绍和引用,此处不再加以赘述。
hh的功能是以char的格式输入,其他的同理。
%[flag]type | |
type | 含义 |
d | int |
i | 整数,可以为十六进制或八进制 |
u | unsigned int |
o | 八进制 |
x | 十六进制 |
a,e,f,g | float |
c | char |
s | 字符串 |
[...] | 所允许的字符 |
p | 指针 |
其中,%d与%i都可以实现整型变量的输入,但是%i更为灵活,可以根据实际情况输入十进制、八进制和十六进制。代码如下:
#include<stdio.h>
void main(void)
{
int num0,num1,num2;
scanf("%i",&num0);
scanf("%i",&num1);
scanf("%i",&num2);
printf("num0 is %d\n",num0);
printf("num1 is %d\n",num1);
printf("num2 is %d\n",num2);
}
输入:
123
0x12
012
输出如下:
num0 is 123
num1 is 18
num2 is 10
2 格式化输出
使用不同的占位符结构,进行各种需求的输出。对应的使用方式如下表所示:
%[flag][width][.prec][hlL]type | |
flag | 含义 |
- | 左对齐 |
+ | 在前面放+或- |
(space) | 正整数留空 |
0 | 0填充 |
示例代码如下
#include<stdio.h>
void main(void)
{
printf("%8d\n",12345);
printf("%-8d\n",12345);
printf("%+d\n",12345);
printf("%+d\n",-12345);
printf("% d\n",12345);
printf("%d\n",12345);
printf("%09d\n",12345);
}
输出结果如下:
12345
12345
+12345
-12345
12345
12345
000012345
%[flag][width][.prec][hlL]type | |
width或prec | 含义 |
number | 最小字符数 |
* | 用参数定义字符数 |
.number | 小数点后的位数 |
.* | 用参数定义小数点后的位数 |
示例代码如下:
#include<stdio.h>
void main(void)
{
int num0=10,num1=4;
printf("%8.3f\n",45.25);
printf("%*.*f\n",num0,num1,45.25);
}
输出如下:
45.250
45.2500
%[flag][width][.prec][hlL]type | |
类型修饰 | 含义 |
hh | 一个字节 |
h | short |
l | long |
ll | long long |
L | long double |
hh的功能是以一个字节的形式来输出,其他的以此类推。
%[flag][width][.prec][hlL]type | |
type | 用于 |
i或d | int |
u | unsigned int |
o | 八进制 |
x | 十六进制 |
X | 字母大写的十六进制 |
f或F | float |
e或E | 指数 |
g或G | float |
a或A | 十六进制浮点 |
c | char |
s | 字符串 |
p | 指针 |
n | 读入/写出的个数 |
其中%n是用来计算输出字符的个数的。
3 输入输出函数的返回值
标准输入函数的返回值为输入变量的个数,标准输出函数的返回值为输出字符的个数。例如:
#include<stdio.h>
void main(void)
{
int num0=0,num1=0;
int a=0,b=0;
num0=scanf("%d%d",&a,&b);
num1=printf("%d\n",a);
printf("num0=%d,num1=%d",num0,num1);
}
输入:
1234
5678
输出为:
1234
num0=2,num1=5