C语言的输入输出是由函数完成的,C再标准输入输出头文件stdio.h中定义了若干输入输出函数可供调用。常见的输入输出函数有getchar()、putchar()、scanf()、printf()、gets() 和 puts() 等。
一、缓冲区的概念及作用
缓冲区是内存中的一段存储区域,用来临时存放一些数据。
电脑CPU处理速度很快,比从外设(电脑、鼠标、键盘)输入的速度快得多。如果外设一输入,CPU就同步处理数据,就会导致CPU能力的浪费。而缓冲区就像是CPU的待事项办本,把要处理的数据写在待办事项本上,CPU就可以先去完成别的任务,之后再集中处理待办事项本(缓冲区)的数据。
现在的C语言基本上都采用缓冲文件系统。当一个程序开始运行时,系统就会给键盘和显示器分配缓冲区,就是说,只要程序开始运行,内存中就已经有键盘缓冲区和显示器缓冲区了。
键盘缓冲区用来存放用户从键盘输入的数据,当用户输入完数据并按下Enter键是,这些数据被送入缓冲区。
①当用户从键盘输入ABC并按Enter键,则送入缓冲区的是‘A', 'B', 'C', '\n'4个字符;
②当用户从键盘输入12并按Enter键,则送入缓冲区的是‘1, '2', '\n'3个字符;
③用户输入的任何数据,都是作为一个个字符存放再缓冲区中的;
④Enter也是一个字符,在送入缓冲区时被自动转换为了换行符'\n'。
二、getchar()和putchar()
顾名思义,getchar()和putchar()只能用来输入输出一个字符,不能输入输出其他类型的数据。
1. getchar()
作用:从键盘缓冲区读取一个字符返回,返回值时所读取字符的ASCII码值。
char c;
c = getchar();
c += 32;
printf("%c\n", c);
//输入:A
//输出:a
2. putchar()
作用:将括号中所给的字符输出,返回值时被输出字符的ACSII码值。
char c='A';
putchar(C); //输出A
putchar(66); //输出B
putcahr('C'); //输出C
putchar('C'+32); //输出c
putchar('\n'); //换行
三、printf()和scanf()
1. printf()
使用格式:printf("格式控制字符串",输出列表);
作用:执行格式化输出,将结果输出到标准输出设备(显示器)缓冲区。
格式符 | 含义 | 举例 | 输出结果 |
---|---|---|---|
d | 用十进制输出整数 | int a =65; printf("%d",a); | 65 |
o | 用八进制输出整数 | int a=65; printf("%o",a); | 101 |
x(X) | 用十六进制输出整数 | int a=27; pirntf("%x,%X",a,a); | 1b,1B |
u | 输出无符号整数(十进制) | unsigned short a=32768 printf("%hu,%hd",a,a) | 32768,-32768 |
c | 输出一个字符 | int a=65; printf("%c",a); | A |
s | 输出字符串 | char a[10]="ABCD"; printf("%s",a); | ABCD |
f | 输出单精度或双精度的实数 | float a=123.45; printf("%f",a); | 123.450000 |
e | 用标准格式输出指数形式的浮点数 | float a=123.45; printf("%e",a); | 1.234500e+002 |
% | 输出字符% | printf("%%"); | % |
2. scanf()
scanf()的格式与printf()类似,区别是:括号内字符串的后面是地址列表,用来指定数据的存储位置 。其作用是,从键盘缓冲区读取字符序列,按指定格式进行转换后,存储于指定位置的变量中。
scanf("%d %d",1236,2518);
意思是:从键盘缓冲区取得两个整数,分别存储到内存1236和2518处。