简单IO

简单IO操作:

1、概念:
I INPUT
O OUTPUT
默认设备:I 键盘 O 显示器
2、c语言默认没有IO操作相关的关键字。但是国际标准中封装了一组标准IO操作函数作为C语言的补充可以用于操作IO设备:
===》stdio.h ===>封装好的默认标准IO操作库函数
===》printf() scanf()属于stdio.h的库函数
路径 /usr/include/stdint.h
===》所有的标准io相关库函数要查询帮助
1、vim stdio.h ==>函数原型
2、man 3 xxx ==>xxx函数对应的说明
3、函数学习 》标准IO库函数
三要素:
1、函数的功能和名称
2、函数的参数
3、函数的返回值
以上属于了解内容
4、基本io函数
=>必须掌握 ===>stdio.h
4.1 单字符IO ==》getchar()/putchar()
4.2 格式化IO ==》scanf()/printf()
4.3 字符串IO ==》gets()/puts()

1、单字符IO
int getchar(void);
功能:从键盘获取一个字符并返回。
参数:无
返回值:成功 返回获取的键盘字母
失败 EOF
注意:该代码执行会阻塞等待用户输入
任何输入都会按照ASCII的码获取。
默认键盘输入都是回车换行提交数据。
int putchar(int c);
功能:将参数c对应的字母输出到默认的输出设备显示器终端。
参数:c 要输出的字符
返回值:成功 返回值就是输出的字符
失败 EOF
注意: EOF == -1
putchar()函数不会阻塞,直接输出。

2、字符串IO ===》gets()/puts()
Input:
char *gets(char *s);===>void gets(char buff[]);
功能:默认阻塞等待并从键盘获取用户任意输入的字符串。
参数:s buff 用于存储数据的内存区 ===>栈区
char buff[128]={0}; ///定义一个字符串数组
返回值:成功 返回接受到的字符串地址
失败 NULL
output:
int puts(const char *s); ==》int puts(char buff[]);
功能:将指定的buff/s所在内存区中的字符串打印输出到屏幕终端。
参数:s/buff 要输出的数据
返回值:成功 返回>=0 值 == 字符串的长度
失败 EOF
注意:puts 输出的时候自动带一个’\n’;

gets的编译提醒验证:
gets函数默认可能存在内存溢出的漏洞。
3、格式化IO ==》printf()/scanf()
int scanf(const char *format, …);
功能:从键盘缓存区扫描数据并以指定格式获取该数据
该函数会阻塞等待用户输入,回车提交数据。
参数:format 输入数据的格式
… 可变长参数。
format的格式如下:"%[修饰符]格式符"
“%c” ==>按照单字符形式获取数据 ===getchar()
“%d” ==>按照十进制整数形式获取数据
“%x” “%o” “%f” “%s”
注意:以上格式符可以只有一个,也可以有多个如果有多个用空格或者指定格式隔开。
***** 输入的格式符最后一定不要有’\n’或者’ ’
原因:scanf自动忽略空白符’\n’ ‘tab’
***** 如果scanf过程中都是"%c" 获取数据则要注意回车换行也会接受。
***** 如果scanf的是个字符串,则可变长参数部分的变量一般用数组,则不用写取地址符号。
***** scanf函数在"%s"获取字符串的时候只能获取空白符之前的第一个字符串。
修饰符: h l n ===>n n是数字表示宽度。
…可变长参数,必须和格式符一一对应。
同时要保证输入的参数是地址。
用意:将获取的数据存储到该地址所在的内存中。
返回值:成功 返回收到的数据单元个数。
失败 EOF
文件结尾 0
问题:在对scanf()函数传参时,为什么数值和字符数据类型变量前要使用取地址符&,而字符串变量则不需要?
答:取地址符&代表存储数据的变量的内存地址,对于数值类型变量和字符类型变量而言,他们的变量名并不代表内存地址,因此需要变量名之前使用取地址符&
但是,对于字符串类型变量来说,其实变量名代表内存地址,所以不需要在变量名之前使用取地址符号&

格式化输出函数 printf
//int scanf(const char *format, …);
int printf(const char *format, …);
功能:按照format指定的格式向屏幕终端程序输出数据。
参数:format输出的格式,有如下输出格式:
“%[修饰符]格式符”
“%d” ===>十进制整数输出
“%c” ===>ASCII字符输出
“%o” =>八进制输出》"%#o" ==>自带格式
“%x” ===>十六进制输出 ==>"%#x" ==>自带格式
“%X” ===>0XAE 0xae
"%f"单精度浮点数 “lf” 双精度浮点数
“%u” 无符号十进制整数输出
“%s” 字符串输出
修饰符:# 0 - + m .n h l
# 表示自带格式方式输出 八进制和十六进制用
0 输出域宽不足时候补0
- 输出过程对于负数自带 -
+ 输出过程对于整数自带
m 输出过程中数据的宽度
.n 输出过程中小数点后有效位数
或者字符串的字符输出个数
h l 分别表示短整形和长整形输出。
返回值:成功 输出字符的个数
失败 NULL

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值