一、终端I/O
1.单字符I/O:getchar(),putchar()
(1)单字符输入(get character):
【 int getchar();】
- 返回值为输入的字符(ASCII)。可以接受任何字符,包括非打印字符。当一次键入多个字符时按下回车键后getchar开始逐个读取所有字符(包括回车符)。
- 在某些编译环境下,因为scanf()函数不读取回车符且将其留在输入队列中,下次调用scanf()时会由于先读取到回车符而在读取数据前过早结束输入,所以常在scanf后用【getchar();】读取并丢弃这个回车符。
(2)单字符输出(put character):
【int putchar(int);】
- 返回值为输出的字符,参数为要输出的字符(ASCII)。是在stdio.h中定义的含参宏。
2.格式化输入输出
(1)格式化输出(print format):
【 int printf(格式控制,输出表列);】
- 格式控制是一个字符串常量,由普通(转义)字符,转换说明符,转换修饰符组成。普通(转义)字符直接输出(控制光标),转换说明符会按顺序替换为输出表列中的量。常用的格式说明符有:
<1> %d %ld 整型或长整型
<2> %c 字符型,参数可以为对应ASCII码或单引号内的字符
<3> %f %lf 浮点数,double型常用%lf。默认6位小数,自动进行四舍五入
<4> %s 字符串型,不输入输出'\0'
<5> %e 用e计数法(科学计数法)输出浮点数
<6> %x 输出16进制数,%#x输出0x格式
<7> %o 无符号8进制数
<8> 浮点数%m.nf,m是说明总宽度,正数代表左对齐负数代表右对齐。默认用空格补位,如果m的最高位为0则用0补位。
C通过变量类型来将变量值存在堆栈(stack)中,但printf函数在读取时依据转换说明符。如果较长的数据使用较短的说明符只会读取一部分(转换为十进制后可能变成古怪的数字),较短的数据使用较长的说明符会读取下一内存单元中的字符而输出不可预知的结果。
printf函数成功输出会返回输出的字符数(包括打印字符和非打印字符),失败返回一个代表失败类型的负值。
在指定输出位数时可以用*代替数字,但在输出表列的对应位置要有一个对应的int值。
printf("%.*f",2,2.333);
(2)格式输入(scan format)
【int scanf(格式控制,地址表列);】