scanf,cin以及其返回值

本文详细解析了scanf函数对于%d, %s, %c等不同格式说明符的输入处理方式,以及如何处理空白字符。同时介绍了scanf的返回值,包括正整数表示成功输入的项目数,0表示输入不匹配,EOF表示输入流结束。另外,文中也提及了cin作为对象并无返回值,但其操作符>>在输入失败或遇到不匹配类型时会设置错误标志,影响后续的输入判断。" 131443808,19371539,Python绘制气泡图指南,"['信息可视化', 'python', '开发语言']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本人认为数据处理是非常重要的,如果能在输入时候进行处理会省下很多事情。

关于scanf这里整理了一下:

1:从scanf()角度看输入

如果使用%d说明符,scanf()函数开始每次读取一个输入字符,它跳过空白字符(空格,制表符和换行符)直到遇到一个非空白字符,并持续读取和保存字符直到它遇到一个非数字的字符。

如果使用%s说明符,那么空白字符以外的所有字符都是可接受的,所以scanf()跳过空白字符直到遇到第一个非空白字符,然后保存再次遇到空白字符之前的所有非空白字符。这就意味着%s使scanf()读取一个单词。scanf()在字段的结尾或者第一个空白字符处停止(比如"%10s"如果输入I am happy那么读取到的就是只有一个单词"I",而不是10个字符的长度,尽管字段宽度是10)。最后一点:当scan()把字符串放在一个指定的数组中时,它添加终止的'\0'使得数组内容成为一个C字符串。

如果使用%c说明符,那么所有的输入字符都是平等的。如果下一个输入字符是一个空格或者换行符,将会把这个空格或换行符赋给指定的变量;不会跳过空白字符。

2:格式字符串中的常规字符

scanf("%d, %d",&n,&m);

即输入一个数字,一个逗号,一个数字。如:

88,121

或者

88,

121

格式字符串中的空格意味着跳过下一个输入项之前的任何空格。例如下面语句

scanf("%d,   %d",&n,&m);

将会接受下列任何一个输入行:

88,121

88 , 121

88,    121

注意,“任何空格”的概念包括没有空格的特殊情况。

2:scanf 的返回值

scanf()函数返回成功读入的项目的个数,scanf 的返回值可以分成三种情况:

(1)正整数 , 表示正确输入参数的个数。例如执行 scanf ("%d %d", &a, &b);  如果用户输入"3 4",可以正确输入并返回2(正确输入了两个变量);如果用户输入"3,4",可以正确输入a,无法输入b,返回1(正确输入了一个变量)。 

(2) 0,表示用户的输入不匹配,无法正确输入任何值。如上例,用户如果输入",3 4",返回0。   

(3)EOF,这是在stdio.h里面定义的常量(通常值为-1),表示输入流已经结束。在Windows下,用户按下CTRL+Z(会看到一个^Z字符)再按下回车,就表示输入结束;                

如   scanf("%d%d",&a,%b); 

如果a和b都被成功读入,那么scanf的返回值就是2

如果只有a被成功读入,返回值为1

如果a和b都未被成功读入,返回值为0 如果遇到错误或遇到end of file,返回值为EOF。

关于cin的返回值

其实这么说有点错误的,因为cin是个对象,没有所谓返回值之说,一般来说其他对象重载了>>操作符,才有了所谓的返回值,很多时候>>输入操作符返回流对象的引用,cin >> x 返回istream&,cout << x返回oostream&,暂且不说对象,就说c++的内嵌类型,如int,char之类的。

我们可以看到的现象是这样的:

1.if可直接判断流,如if (cin),while可以间接判断(判断为bool型),如while (cin >> x)
2.若流被标记错误(读取失败)就返回false,也就是0。

3.键入EOF时,while(cin>>str){}会退出,其中str为string。

4.当在缓冲区读取到的数据与>>后面的变量类型不匹配的时候,就会结束。比如说a,b是int的,你如果在下面的cin>>里面输入的是非int的(比如说是'a'或其它)就会结束。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值