第四章 键盘输入和屏幕输出
转义字符
\n | 换行,光标移到下一行的起始位置 |
\r | 回车(不换行),光标移到当前行的起始位置 |
\0 | 空字符 |
\t | 水平制表 |
\v | 垂直制表 |
\b | 退格 |
\f | 走纸换页 |
\a | 响铃报警提示音 |
\" | 一个双引号 |
\' | 一个单引号 |
\\ | 一个反斜线 |
\? | 问号 |
\ddd | 1到3位八进制ASCII码值所代表的字符 |
\xhh | 1到2位十六进制ASCII码值所代表的字符 |
每个字符都有一个等价的整型值与其相对应,这个整型值就是该字符的ASCII码
从这个意义上而言,可将char型看成是一种特殊的int型
对char型数据和int型数据进行相互转换不回丢失信息
Unicode——国际标准化组织制定的更强大的编码
//L4-1
#includemain() { char ch; printf("Press a key and then press Enter:"); ch = getchar(); /* 从键盘输入一个字符,按回车键结束输入,该字符被存入变量ch */ ch = ch + 32; /* 将大写英文字母转换为小写英文字母 */ putchar(ch); /* 在屏幕上显示变量ch中的字符 */ putchar('\n'); /* 输出一个回车换行控制符 */ }
//运行结果
Press a key and then press Enter:B
b
函数getchar()和putchar()是C标准库中专门用于字符输入/输出的函数
函数getchar()没有参数
printf(格式控制字符串,输出值参数表)
格式控制字符串包括:格式转换说明、需原样输出的普通字符
//L4-2
#includemain() { char ch; printf("Press a key and then press Enter:"); ch = getchar(); ch = ch + 32; printf("%c, %d\n", ch, ch); /* 分别输出变量ch中的字符及其ASCII码值 */ }
//运行结果
Press a key and then press Enter:B
b, 98
printf中的()格式修饰符
- l:long
- L:long double
- h:short
- m(m为整数):指定域宽(输出项输出时所占的列数)
- .n(n为非负整数):指定显示精度
//L4-3
#includemain() { const double pi = 3.14159; double r, circum, area; printf("Input r:"); scanf("%lf", &r); circum = 2 * pi * r; area = pi * r * r; printf("printf WITHOUT width or precision specifications:\n"); printf("circumference = %f, area = %f\n", circum, area); printf("printf WITH width and precision specifications:\n"); printf("circumference = %7.2f, area = %7.2f\n", circum, area);/*使用域宽和精度说明符,数据所占域宽为7,显示的精度为2*/ }
//运行结果
Intput r:6
printf WITHOUT width or precision specification:
circumference=37.699111,area=113.097334
printf WITH width or precision specification:
circumference= 37.70,area= 113.10//注意,小数点也占一个字符位置
scanf(格式控制字符串,参数地址表)
在用scanf()输入数值型数据时,遇到以下几种情况都会认为数据输入结束
- 遇空格符、回车符、制表符
- 达到输入域宽
- 遇非法字符输入
如果函数scanf()的格式控制字符串中存在除格式说明符之外的其他字符,那么这些字符必须在输入数据时由用户从键盘原样输入
//L4-4
#includemain() { int a, b; scanf("%d %d", &a, &b); printf("a = %d, b = %d\n", a, b); }
//运行结果
12 34
a = 12, b = 34
scanf("%d%*c%d", &a, &b);允许用户用任意字符作为分隔符输入数据
当scanf()返回指定的数据项数时,表示函数被调用成功
当scanf()返回EOF值时,表示函数被调用失败
//L4-5
#includemain() { int data1, data2; char op; printf("Please enter the expression data1 + data2\n"); scanf("%d%c%d",&data1, &op, &data2); printf("%d%c%d = %d\n", data1, op, data2, data1+data2); }
//运行结果
Please enter the expression data1 + data2
12+3
12+3 = 15
//L4-6
#includemain() { int a; char b; float c; printf("Please input an integer:"); scanf("%d", &a); printf("integer: %d\n", a); printf("Please input a character:"); scanf(" %c", &b); /*在%c前面加一个空格,将存于缓冲区中的回车符读入*/ printf("character: %c\n", b); printf("Please input a float number:"); scanf("%f", &c); printf("float: %f\n", c); }
//运行结果
Please input an integer:12
integer: 12
Please input a character:a
character: a
Please input a float number:3.5
float: 3.500000