C语言基础、printf、scanf、格式符、字符输入输出函数
1. 起步
#include <stdio.h>
int main() {
printf("Hello!\n")
return 0
}
2. printf 输出函数、格式符
表1 printf 函数中用到的格式字符
格式字符 | 说 明 |
---|---|
d, i | 以带符号的十进制整数输出 |
o | 以八进制无符号整数输出 |
x, X | 以十六进制无符号整数输出 |
u | 以无符号十进制整数输出 |
c | 以字符形式输出,只输出一个字符 |
s | 输出字符串 |
f | 以小数形式输出单、双精度,隐含输出6位小数 |
e, E | 以指数形式输出实数 |
g, G | 选用 %f 或 %e 格式中宽度较短的方式输出 |
表2 printf 函数中用到的格式附加符
字 符 | 说 明 |
---|---|
l | 长整型整数,可加在格式符 d、o、x、u之前 |
m | 数据最小宽度 |
n | 小数位数或截取的字符个数 |
- | 输出的内容在域内靠左 |
① %d 用来输出一个有符号的十进制整数
printf("%d", 6);
// 1. 可以在声明中指定输出数据的域宽,例如:
printf("%5d", 12);
printf("%5d", -345);
// 输出的数据显示在 5 列区域的右侧
// 输出结果为:
// 12
// -345
// 2. 输出 long 类型数据,需要在格式符 d 前面加字母 l 使用 %ld
// long long 类型的则需要加两个l , %ll
② %c 用来输出一个字符
// 1. 与 %d 一样可以指定域宽
// 2. 如果用来输出一个 0~127 范围的数字(即一个字节,8位),系统会找到该数字在 ASCII 码中对应的字符输出,例如:
short a = 121;
printf("%c", a);
// 输出 y
// 如果数字超过一个字节,%c 也只看最后一个字节
short a = 377;
printf("%c", a);
// 输出 y
③ %s 用来输出一个字符串
short a = "china";
printf("%s", a);
// 输出 china
④ %f 用来输出实数(包括单精度、双精度、长双精度)
// 1. 基本型 %f
// 只能得到 6 位小数
double a = 1.0;
printf("%f", a/3);
// 输出 0.333333
// 2. 指定数据宽度和小数位数,用 %m.nf,例如:%7.2f 表示输出数据占7列,其中包括2位小数,对其后一位采用四舍五入的方法处理。
// 如果把小数位数指定为 0 ,则不会输出小数。例如:
printf("%7.0f", 0.5);
// 输出 0
printf("%20.15f", 1.0/3);
// 输出 0.333333333333333
注意:在用 %f 输出时,要注意数据本身能提供的有效数字,如 float 型数据的存储单元只能保证6位有效数字。double 型数据只能保证15位有效数字。例如:
float a = 1000/3.0;
printf("%f", a);
// 输出 3333.333252
// 本应输出 3333.33333333
// 3. 数据向左靠齐 %-m.nf
⑤ %e 以指数形式输出实数。如不指定数据宽度和小数位数,系统自动指定小数位6位,指数位5位。其中e也可以写成大写E。
printf("%e", 123.456);
// 输出 1.234560e+002 共13位
也可以使用 %m.ne 指定数据宽度和小数位数,例如:
printf("%13.2e", 123.456);
// 输出 1.23e+002 共13位(前面4个空格)
⑥ 其他格式符
%i 作用与 %d 相同,按十进制整数实际长度输出。一般习惯用 %d 而少用 %i
%o 以八进制整数输出
%x 以十六进制整数输出
%u 无符号以十进制整数输出
%g 用来输出浮点数,系统自动选 %f 或 %e 格式输出,选择长度较短的格式
3. scanf 输入函数、格式符
表3 scanf 函数中用到的格式字符
格式字符 | 说 明 |
---|---|
d, i | 输入有符号的十进制整数 |
o | 输入无符号的八进制整数 |
x, X | 输入无符号的十六进制整数 |
u | 输入无符号的十进制整数 |
c | 输入单个字符 |
s | 输入字符串 |
f | 输入实数,可以用小数或指数形式 |
e, E, g, G | 与 %f 作用相同 |
表2 scanf 函数中用到的格式附加符
字 符 | 说 明 |
---|---|
l | 输入长整型整数,可加在格式符 d、o、x、u、f、e之前 |
h | 输入短整型数据,可加在d、o、x |
域宽 | 输入数据所占宽度 |
* | 本输入项在读入后不赋给相应的变量 |
① 与 printf 不同,scanf 函数中的格式控制后面应当是变量地址,而不是变量名。
scanf("%f %f %f", &a, &b, &c);
printf("%f %f %f", a, b, c);
② 输入的数据必须与 scanf 函数 “” 中的内容相同,例如:
scanf("a=%f,b=%f,c=%f", &a, &b, &c)
// 则在输入时也要输入 a=1,b=2,c=3
③ 在使用 %c 格式输入时,空格和转义字符都作为有效字符输入,例如:
scanf("%f%f%f", &a, &b, &c)
// 如果输入 1 2 3 (中间有空格)
// 实际输出会是 a=1 b=空格 c=2
④ 在输入数值时,如果遇到不属于数值的字符,会认为该数据结束。例如:
scanf("%d%c%f", &a, &b, &c)
// 如果输入 1234a123o.26
// 实际输出会是 a=1234 b=a c=123
4. 字符输入输出函数
① putchar(变量名) 输出单个字符
char a = 'B', b = 'O', c = 'Y';
putchar(a);
putchar(b);
putchar(c);
// 输出 BOY
int a = 66, b = 79, c = 89;
putchar(a);
putchar(b);
putchar(c);
// 输出 BOY
② getchar() 输入单个字符
char a,b,c;
a=getchar();
b=getchar();
c=getchar();
相关书籍:《C程序设计》 谭浩强著