1. 简介
C语言中的输入与输出(IO)的操作是用函数来实现的,IO主要是与外部设备进行通信,输入就是in,获取外部设备数据,输出就是out,写入外部设备数据。
C语言中涉及到读写文件,都属于字节流操作。从文件中读取数据就是输入流,向文件中写入数据就是输出流。
2. printf()和scanf()
2.1 printf()函数
printf()函数用于将数据格式化输出到终端屏幕上,print是打印的意思,而f就代表format,即格式化的意思,表示可以指定不同格式的输出。printf()函数的使用需要引入<stdio.h>标准库头文件。
#include <stdio.h>
printf("test\n");
printf()函数输出的内容都会显示在同一行,光标停留在输出内容的结尾,不会自动换行,需要我们手动加上转义字符\n,就可以使光标移动到第二行。
printf()函数的格式化输出通过“占位符”来指定,占位符就是表示这个位置要被其他的值替换,它接受可变参数,第一个参数就是占位符,后面的参数就是替换占位符的值,占位符的格式要和替换的值一一对应。
占位符的形式是以%开头,后面跟的是占位符的类型。
printf("%d\n",10);//十进制整数格式
上面的示例中,%d占位符表示以十进制整数的格式输出,所以后面的参数必须是十进制整数。
printf()函数的占位符有很多,和C语言的数据类型相对应。常用的如下。
- %d或%i:输出十进制整数;
- %u:输出无符号的十进制整数;
- %o:输出八进制整数;
- %x:输出十六进制整数;
- %f:输出十进制浮点数;
- %p:输出指针;
- %c:输出字符;
- %s:输出字符串;
- %zd:输出size_t类型;
- %%:输出百分号。
printf()函数还可以定制占位符的形式,通过在%后面加上数字或特殊符号来实现。
//限定宽度
printf("%5d\n", 5); // 输出为 5,表示占位符的宽度至少为5位
printf("%-5d\n", 5);//输出为5 ,和%5d是相反的,在后面加空格
//限定小数位数
printf("%.3f\n",3.14);//输出3.140
//宽度和小数位数限定联合使用
printf("%5.3f\n",3.14);//输出 3.140
//也可以通过传递参数来实现,等同于
printf("%*.*f\n",5,3,3.14);
2.2 scanf()函数
scanf()函数是与printf()函数是相对应的,用于读取来自键盘的输入,也是需要引入标准库头文件<stdio>才能使用。当程序执行到这个函数的时候,会自动暂停等待用户的输入,用户输入完成后scanf()函数就会处理。scanf()函数的使用与printf()函数基本类似,就连占位符也是一样的。
scanf("%d",&a);//输入十进制整数值
注意这里的%d是十进制整数参数,表示输入的是一个十进制整数,这里和printf()函数一样。后面的要替换的值是&a,即变量a的内存地址,因为scanf()函数传递的是一个指针,将变量a的地址指向了用户输入的值。scanf()函数还会自动忽略输入的空格、换行符、制表符等。
3. getchar()和putchar()
getchar()函数返回从键盘输入的一个字符,它是无参数形式的,同样也是定义在标准库头文件<stdio.h>中,它的功能相当于scanf()函数输入一个字符。
char c = getchar();
//等同于
scanf("%c",&c);
putchar()函数用于将字符输出到屏幕上,它接受一个int类型的参数,并返回输入的字符。同样也是定义在标准库头文件<stdio.h>中,它的功能相当于printf()函数输出一个字符。
putchar(c);//输出到屏幕
//等同于
printf("%c",c);
4. gets()和puts()
gets()函数用于从标准stdin中读取一行到s所指向的缓冲区,遇到EOF就终止;puts()函数把字符串s和一个换行符写入到标准stdout,get()函数与puts()函数一起使用。简单来说就是,puts()函数在屏幕上显示,gets()函数则用于获取用户的输入。
char *gets(char *s) //gets()函数原型
int puts(const char *s) //puts()函数原型
//使用
puts("www.peiqiblog.com");//输出到屏幕上
char str[20];
puts("www.peiqiblog.com");
gets(str);