一个C程序通常包含多个源文件,每个源文件由预处理命令,数据声明,还有多个函数
其中的每个函数都包含由函数首部和函数体组成,函数体中要包含数据声明和执行语句。
复合语句是用一对花括号括起来的一些语句。
一、数据输入与输出
在C语言中输入和输出的参考对象是RAM内存,对内存进行写操作称为输入,对内存进行读操作称为输出。
C语言本身不提供输入和输出语句,输入和输出的操作是通过调用系统库函数中的输入输出函数来实现的。下面是几种输入输出语句
字符数据输入和输出
1.putchar:用来向终端输出单个字符,putchar(a);
putchar函数的返回值类型为 int,形参数量为一个,类型为int型。返回值实际上就是实参的ASCII码值。
2.getchar:用来从终端获取一个字符。
getchar函数的返回值类型为 int, 没有形参。返回值为从终端获取到的字符的ASCII码值。通常形式为 c = getchar();
缓冲区:实际上是一段内存空间 类型为队列,原则是FIFO(先进先出),当低速设备遇到高速设备时,低速设备的输入会存入缓冲区,由高速设备统一进行取出,例如,键盘输入数据,键盘输入的数据会存入缓冲区,由CPU统一取出,这样可以有效解放CPU资源,避免造成CPU资源浪费。
二、格式化输入和输出
1.格式化输出函数
printf()函数的调用格式为:
返回值类型为 int ,数值上为字符串的长度。形参为字符指针常量。
格式化字符有:
- %d 十进制有符号整数
- %u 十进制无符号整数
- %f 浮点数
- %s 字符串
- %c 单个字符
- %p 指针的值
- %e 指数形式的浮点数
- %x, %X 无符号以十六进制表示的整数
- %o 无符号以八进制表示的整数
- %g 把输出的值按照 %e 或者 %f 类型中输出长度较小的方式输出
- %p 输出地址符
- %lu 32位无符号整数
- %llu 64位无符号整数
- %% 输出百分号字符本身。
-
除了格式化说明符之外,printf() 函数还支持一些标志和选项,用于控制输出的精度、宽度、填充字符和对齐方式等。例如:
- %-10s:左对齐并占用宽度为 10 的字符串;-号为左对齐 ,不加-号为右对齐
- %5.2f:右对齐并占用宽度为 5,保留两位小数的浮点数;
- %#x:输出带有 0x 前缀的十六进制数。
2.格式化输入函数
scanf()函数用于从终端读取格式化输入。
调用格式为
返回值为 int型 ,形参为字符指针常量。返回值为成功接收到的数据个数。
使用scanf函数时要注意一些问题:
取地址符不能丢,
C语言无法在被调函数中修改主调函数,因此必须通过指针的方式来修改变量的值,从而实现输入效果。
scanf函数无法根据地址判断变量所占的字节数,因此,格式化字符很重要,%d -int,%ld-long。
scanf可以传入多个参数实现输入多个数。输入时,在两个数据之间可以用一个或多个空格、tab 键、回车键分隔。
当scanf在输入时遇到以下情况会终止输入
a. 遇空格,或按“回车”或“跳格”(Tab)键;
b.按指定的宽度结束,如“%3d”,只取3列;
c.遇非法输入。
scanf 输入时不能进行精度控制,但是可以进行域宽控制。即可以使用3f,不能使用3.2f。
在用 %c 输入时,空格和"转义字符"均作为有效字符。