其实吧,对于这三对儿,其实主要的区分还是他们的功能和参数还有返回值,我觉得在IO当中才能更好的领会输入输出函数的感觉。
其次就是其实还是要敲代码多练习,我觉得你看的再多不如去敲敲键盘这样领会的比较快。
毕竟有句话怎么说来着,理论是需要实战来验证的,如果光有理论充其量真的只能是纸上谈兵。
至于我分成三部分是因为我觉得这样便于记忆。
一、从终端读入一个字符或从终端输出一个字符
- 好了敲黑板,划重点:***一个字符***
- 从终端读取一个字符
- getchar(); (实际运用是这么用的)
- int getchar(void); (man手册是这么定义的,不用理会他啦)
- 功能:从终端读取一个字符,吃掉垃圾字符
- 参数:无参数
- 返回:将成功读取字符的ASCII码值返回(注意哦,返回的是一个ASCII码值)
eg:
getchar();
-
- 就是这么用的不用质疑
- ( )里面什么参数也没有,因为这个函数无参,所以什么参数都不用写
- 使用这个函数之后会从终端等待你输入一个字符
2.从终端读入一个字符
-
- putchar(c);
- int putchar(int c); (手册是这么定义的,不用理会他啦)
- 功能:输出一个字符
- 参数:传递一个整型的表达式
- 返回:将成功输出字符所对应ASCII码返回
eg:
-
- putchar('c'); //c的ASCII码为99,所以输出99,在这里c不是变量只是个字符
- 或者 int c = 'A';
- putchar(c); //在这里c是变量
二、从终端读取或读入字符串------划重点(字符串)
1、从终端读取字符串
- gets
- char *gets(char *s); //只能传递变量的地址
- 功能:从终端读取字符串
- 参数:char *传递地址
- 返回:返回s
- 特点:只遇到‘\n’才结束输入(scanf需要这么使用:scanf("%[^\n]");)
- eg:
- 定义一个字符串数组
- char s[6];
- gets(s);
2、读入字符串
- puts
- int puts(const char *s); //const:可以传递变量的地址、常量的地址
- 功能:打印字符串
- 参数:char *传递地址
- 返回:输出字符所占字节数
- 特点:自带换行符,遇到‘\0’字符结束输出这个特性经常用
- eg:
- 定义一个字符串数组
- char s[6];这个相当于定义了一个空字符串
- gets(s); //当你读入字符串的时候,s数组里面便存储了数据比如你从终端输入hello
- puts(s); //puts就会从数组中读出hello
顺便普及一下数组的定义
数组:由若干个数据类型相同的元素组成的集合
定义:类型 数组名[元素个数];
访问:s[0] ~ s[N-1]
性质:元素类型相同,数组名是地址 (这个你得记住数组名是地址)
这样的,假如有个数组s[6]="hello";
因为""双引号来表示字符串会自动在hello后面补上'\0'
所以s[6]可以这么表示s[6]={'h','e','l','l','o','\0'};
而数组中6个元素表示方式是从0开始的也就是说每个元素表示方式是这样的:
s[0]='h';
s[1]='e';
s[2]='l';
s[3]='l';
s[4]='o';
s[5]='\0';
三、(最后这个用的最多)根据指定格式输入输出
1、根据指定格式输入
- scanf
- int scanf(char *format, 存储的地址列表);
- 功能:根据指定的格式获取指定类型的数据
- 参数:format格式控制字符串,地址列表(&)
- 返回:成功获取数据的个数
- %d %o %x %c %f %s
- 注意:
- & 是个取地址符号
- 例如int a;表示定义了一个变量a,a不是地址,所以在用的时候要加上取地址符&
- eg:
- int a;
- scanf("%d",&a);
- 因为a是int类型的所以用%d,然后你在终端输入的值会赋值给a
- float b = 12.34;
- scanf("%f",&b);
- b是float类型,所以用%f
- 字符类型用%c
- 字符串类型用%s
- 八进制用%o
- 十六进制用%x
- 还有数组本身就是地址
- 所以:
- char s[6]="hello";
- scanf("%s",s);
- 因为s是数组,数组是地址,所以就不需要加取地址符&了
2、根据指定格式输出
- printf
- 格式:printf(“格式控制串”,输出表)
- 头文件:#include <stdio.h>
- 功能:按指定格式向显示器输出数据
- 返回:输出数据所占的数据宽度
1--- 输出类型
-
- %d :有符号十进制整数
- %o :八进制整数
- %x :十六进制整数
- %c :字符
- %f :浮点型数据
- %e :指数形式
- %ld:long
- %p :打印地址 //int a; &a; -->获取变量a在内存中的地址
- %s :用于输出字符串
2--- 控制输出格式
-
- # :在八进制、十六进制前加前导标识
- M :控制输出数据域宽
- - :输出实现左对齐,默认右对齐
- 0 :空位用0补齐
- .N :控制小数点位数(四舍五入), 控制字符串输出字符个数
eg:
-
- int a = 5;
- printf("%d",a);
- printf("%-2d",a);//输出大小2,左对齐