目录
1. 数据的格式化屏幕输出
- 解决的问题
-
C 语言如何实现数据的输入和输出?
-
如何向屏幕输出一串字符信息?
- 如何在屏幕上显示变量的值?
-
- 顺序结构程序
- 输入数据
-
处理数据
-
输出数据
-
程序获得输入数据的方式:键盘,文件
-
键盘:scanf()
-
-
程序输出数据的方式:屏幕,文件
- 屏幕:printf()
- #include<stdio.h>
- 编译预处理指令:在编译之前进行的处理
- 实现标准输入输出函数scanf()、printf()时,在文件开头定义
1.1 格式化屏幕输出
-
按指定格式和类型输出变量的值,或者输出一行字符串
-
printf()格式字符
-
%d d ecimal 输出 十进制有符号 int 型
-
%u unsigned 输出 十进制无符号 int
-
%f f loat 以 小数形式 (6 位小数 ) 输出 float,double 型
-
%e exponent 以 标准指数形式 输出 float,double 型
- 变量不能作为e的指数
- 指数必须存在,且必须是整数,正负0均可。
- E前必须有一个数字
-
%c c haracter 以字符形式 输出 单个字符用%d可输出对应的ASCII码
-
- printf()格式修饰符
-
l 加d、u前输出long型
-
h 加d、u前输出short型
- m 输出数据的最小域宽
- 数据位宽大于m,按实际位宽输出
-
数据位宽小于m时, 右对齐 ,左补空格
-
对于浮点数来说, 小数点占一位位宽
-
-m 左对齐,右补空格
- .n 显示精度 对浮点数表示输出n位小数,四舍五入
- 格式: %.nf、%m.nf
-
printf("Value is:%10.4f", 32.6784728):输出32.6785,位宽为10,右对齐
-
n为零时表示保存至整数
-
- 格式: %.nf、%m.nf
-
输出“%”符号
-
printf("%d %% ", a); 输出为10%
-
-
输出“ ' "符号
-
printf(" \'%d\' ", a); 输出为 '10'
-
-
1.2 格式化键盘输入
- 指定格式从键盘输入指定类型的数据
- 分隔多个输入数据
- 空格、Tab或回车
- 达到输入位宽
- 遇非法字符
- 以以下代码为例
int a, b;
scanf("%d %d", &a, &b);
printf("a = %d, b = %d\n", a, b);
- 格式错误:
- 若scanf()中变量未使用取地址符&,则程序在编译时会报错
- 若第二行格式字符写错,即写为”%f %f",则scanf()将读入错误的数据
-
scanf("%d\n", &a); 运行时错误: 不能包含'\n'等转义字符
- 输入错误:
- 输入“12 3a",则输出为“a = 12,b = 3”
-
如何判断输入正确:scanf()的返回值=正确读入的数据项数
-
格式字符串中的普通字符原样输入,
- 格式字符串与格式修饰符
- 格式字符串:
- %d:输入十进制int型
- %f、%e:输入float型(不能指定输入数据的精度,可指定位宽)
- %c:输入一个字符(包括空白字符)
- 格式修饰符:m、l、L、h、*
- l 加d、u前输入long型,加f、e前输入double型
- L加f、e前输入long double型
- * 输入项在读后不赋值给相应变量
-
scanf("%2d %*2d %2d", &a, &b); 跳过一个位宽为2的十进制整型
-
scanf("%2d%*2s%2d", &a, &b);效果同上
-
- %lf 输入double型,%f输出。原因如下
- 格式字符串:
2. 单个字符的输入和输出
-
字符常量是用单引号括起来的一个字符
-
转义字符
- 一些特殊字符(无法从键盘输入或者另有他用)
- 所有的ASCII码都可以通过转义方式表示出来
- 字符B用转义方式表示:’B‘、'\102'、'\x42'
-
ASCII 码值,普通整数,可作算术运算
2.1 用getchar()从键盘输入单个字符
- ch = getchar()
- 从键盘接收的字符作为getchar()的函数值
-
无参数
-
以 回车符'\n' 结束字符的输入
- 输入的字符(包括回车符)都放在输入缓冲区中
-
行缓冲(Line-buffer)输入方式
-
将输入字符先放入输入缓冲队列中,再从缓冲队列读取字符
-
直到键入回车符或文件结束符EOF时,程序才认为输入结束
-
一行输入结束,getchar()才开始从输入缓冲队列读取字符,前面函数没读走的数据仍在缓冲队列中,将被下一个函数读取
-
一次性把键盘输入的一行字符都放入输入缓冲区,再从输入缓冲区逐个读取字符
-
getchar()以行(而非字符)为单位读取字符,行输入完后再进行读取
-
实际是按文件的方式读取字符
-
文件一般都是以行为单位的
-
- 有时getchar()也可能返回负值
- 若在Unix/Linux下遇到组合键Ctrl+D(Windows下为Ctrl+Z),则返回EOF(一般定义为-1)
2.2 用scanf的%c格式符输入数据
- 用scanf()函数的%c格式符输入字符型数据时,空格和回车等空白字符都会被当作有效字符读入
-
解决
-
在scanf("%c", &b); 前调用getchar(); 将空格或回车符读入
- 在%c前加一个空格:scanf(" %c", &b);
-
- 任意分隔符输入加法算式
#include <stdio.h>
int main()
{
int data1, data2, sum;
char op;
printf("Please enter the expression data1 + data2\n");
scanf("%d %c%d",&data1, &op, &data2);// %c前加一个空格实现对任意空格的获取
printf("%d%c%d = %d\n", data1, op, data2, data1+data2);
}
2.3 用putchar()向屏幕输出单个字符
- putchar(ch)
-
向屏幕输出一个字符,字符型变量ch的值
-
-
printf("%c, %d\n" ,ch ,ch);
-
字符型变量可以%c和%d两种格式输出
-