必威体育Betway必威体育官网
当前位置:首页 > IT技术

C语言scanf函数的返回值问题

时间:2019-11-01 00:14:33来源:IT技术作者:seo实验室小编阅读:78次「手机版」
 

scanf返回值

不经意中发现scanf()的返回值问题,自己试验和了解了一下,一些所知与各位分享;

void main() 

int a;

int b;

int c;

printf("请输入三个整数:");

int x=scanf("%d%d%d",&a,&b,&c);

printf("%d/n%d/n",a,x);

}

1.scanf()函数有返回值且为int型。

2.scanf()函数返回的值为:正确按指定格式输入变量的个数;也即能正确接收到值的变量个数。

从上边的例子中可以得到验证,这里用变量x接收scanf()函数的返回值,并输出显示出来。

当运行中输入三个整数:5 6 7则x的值为3;

如果输入5 6 d(即给c 赋值不正确)则x的值为2;

如果输入5 t d(即给b和c 赋值不正确)则x的值为1;

scanf函数的第一个变量格式不正确时返回值为0,即,当scanf函数的第n个变量格式不正确时,返回值为n-1

continue:

以前学习的时候书上说的是scanf()的返回值等于得到输入值的输入项的个数

scnaf(格式控制,输入项表);

照以上一般形式来看的话

main()

{int a,b,i;

i=scanf("%d%d%d",&a,&b);

printf("%d",i);}

应该输出2,因为就a和b两个输入项得到值了。

但是结果却是3

为什么?

这样的话是不是应该说成得到输入数据的格式说明的个数?

是3,因为是3个%d,输入项的个数是3个,不过是进了缓冲区3个,两个被赋值了,一个扔掉了而已。

那scanf()的返回值应该是进缓冲区的数据的个数,或是说得到输入数据的格式说明的个数,对吗?

像这样scanf("%d%d%d"如果输入1 2 3那返回值就是3,要是输入1 a 那返回值就是1因为只有第一个%d得到数据了,对吗?

scanf 函数的返回值反映的是按照指定的格式符正确读入的数据的个数。

如果输入数据与指定格式不符,则会产生输入错误。遇到输入错误,scanf函数会立即终止,返回已经成功读取的数据的个数。

所以,通过scanf函数的返回值和指定输入数据的个数(由格式符决定)的比较,可以判断数据输入是否成功。

就楼主的这个程序而言,是一个错误的程序,会导致segmentation fault,

因为没有有效的地址接受这个输入的第三个数,whyglinux的解释是正确的,

如果程序可以正常的继续下去执行的话,返回值应该是2.

具体你的程序为什么能够返回,我不知道,我用的是gcc,winxp,运行的时候segmentation fault.

continue:

其实对于scanf这样的一些库函数其实对其来讲,他们使用起来并不是很友好,比如在不同的编译环境中,他们得到的结果数值是不一样的

,这就需要如果我们需要在实际应用使用他们的话,就需要我们对他进行一些实际考证,这样才可以放心使用,其实说白啦,

它的可移植性并不是很优秀吧

文章最后发布于: 2018-03-29 21:42:03

相关阅读

location reload页面实现跳转和刷新

  1 history.go(0)2 location.reload()3 location=location4 location.assign(location)5 document.execCommand('Refresh')6

JAVA对接CC视频的API

JAVA对接CC视频的API 点播的接口文档 直播的接口文档 对接流程: 1.HTTP通信加密实现: CC视频接口的请求参数hash需要由其它请

医药行业如何借助悟空CRM开辟销售通路

随着医疗体制改革的深入,中国医药行业面临着前所未有的竞争压力,医药企业只有贯彻先进的CRM理念,深度把握最终消费者需求、掌握客户

设计模式之抽象工厂模式(C++)

设计模式之抽象工厂模式抽象工厂模式,提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。其UML图如下:结合上图

MVC三层框架详细解析

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow也欢迎大家转载本篇文章。分享知识,造福人民,

分享到:

栏目导航

推荐阅读

热门阅读