输入函数scanf,sscanf,cin,cin.get,getchar全解总汇【吐血推荐】


前言

程序的输入指的是从输入文件将数据传送给程序,程序的输出指的是从程序将数据传送给输出文件,编程最基本的操作就是输入和输出,所以掌握好输入和输出操作是必要的

#include<stdio.h>
#include<string>
#include<iostream>
using namespace std;
int main()
{	
char a;	

在这里插入图片描述
编写程序的主要目的就是为了处理数据。数据从哪里来?数据的来源有很多种方式,如从磁盘文件中读取数据、从数据库中读取数据、从网页中抓取数据等,还有一种原始的方式就是从键盘输入数据。

①scanf("%c", &a);

输入格式:
%0m*l+类型

格式 说明
m 表示用十进制整数指定输入的宽度(即字符数)
0 字符数不足m为时以0补齐
* 表示此输入忽略,不存储到任何内存空间
l 输入的数据类型为长整形

样例展示
1)0m:
前导零补充输入的字符串长度,以达到输入宽度(m)
在这里插入图片描述
2.不储存指定数据(‘*’)
在这里插入图片描述

怎么存储:
在这里插入图片描述
scanf在输入字符串时,虽然不会接收空白符(回车‘n’,空格‘ ’,水平制表符Tab‘t’)(均作为结束标志,并将空白符变成空字符‘\0’补充在输入的最后一个字符后面),并且在输入第一个字符前忽略所有空白符。但scanf在输入字符时,并不会忽略空白符,反而会直接接收任何空白符,因此我们在输入前应该先将容易在缓冲区留下来的空白符清除。
这里补充空字符的概念:在C语里,‘’是一个‘空操作’字符,它不做任何操作,但不能理解为没有字符,应该理解为代表什么都没有的字符,是一个特殊标志,默认作为字符串结束的标志。并且‘’的代码值为0,不计入串的长度,但需要提供一个空间存储以防数据溢出,所以常常数组大小需要至少比字符串多一位。
样例展示
1.输入“abc”后,输入空字符,将‘\0’存储字符串末端后面。
在这里插入图片描述
2.输入字符串时,在输入第一个字符前忽略所有空白符
在这里插入图片描述
3.在输入字符时,并不会忽略空白符,反而会直接接收任何空白符
在这里插入图片描述

②sscanf("%c", &a);

一般输入格式:
与scanf类似,但区别是前面需要输入字符串,作用是将其转换格式,所以sscanf通常被用来解析并转换字符串,其格式定义灵活多变,可以实现很强大的字符串解析功能。值得注意的是,sscanf返回值的是1,表示一个数据
特殊输入格式:
%n*[^输入范围]+类型
样例展示
在这里插入图片描述

char str[7]=“”;
sscanf("123456abcdef", "%100[0-9]", str);
printf("str=%s/n", str);

输出结果:str=123456
上面的格式中,[0-9]表示这是一个仅包含0-9这几个字符的字符串,前面使用数字100修饰词表示这个字符串缓冲区的最大长度(这也是sscanf的不足之处,很容易出现缓冲区溢出错误,实际上sscanf是可以避免出现缓冲区溢出的,只要在书写任何字符串解析的格式时,注意加上其缓冲区尺寸的限制)。

格式符号说明
使用^的例子:
在这里插入图片描述

char str[7] = "";
sscanf("123456abcdef", "%100[^0-9]", str);
printf("str=%s/n", str);

输出结果:str=(无内容)
在[]中增加表示相反的意思,上面的[0-9]表示一个不包含任何0-9之间的字符串,你可能会说为什么没有输出abcdef,因为也并没有指定[a-z]范围。

使用的例子:
char str[32] = “”;
int ret = sscanf(“123456abcdedf”, "%
[0-9]%31[a-z]", str);
printf(“ret=%d, str=%s/n”,ret, str);
输出结果:ret=1, str=abcdedf
加上*修饰表示一个被忽略的数据,同时也不需要为它准备空间存放解析结果。

③cin >> a;

输入的数据以数据本身的数据类型存储 这是C++中常用的输入操作,与C语言中常用的输入函数scanf的区别是它输入字符时是可以“自动忽略空白符”的。
样例展示
▪自动忽略空白符,直到缓冲区留下有效数据
在这里插入图片描述

④cin.get(a);

与cin类似,但不能“自动忽略空白符”。 (需要在前面清空缓冲区)
在这里插入图片描述
⑤a = getchar();

接收一个字符,遇换行符结束,经常用来清空缓冲区
在这里插入图片描述

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>