目录
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 型
- %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%
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的十进制整型
- %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两种格式输出