不经意中发现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这样的一些库函数其实对其来讲,他们使用起来并不是很友好,比如在不同的编译环境中,他们得到的结果数值是不一样的

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

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

C语言scanf()函数返回值的问题相关推荐

  1. c语言函数返回值存储,C语言的函数返回值所存放的寄存器

    #include int add(int a, int b) { return a + b; } int asm_compare_one(int a) { _asm { mov edx, a cmp ...

  2. 关于scanf函数返回值被忽略的解决方法

    关于在Visual Studio 2019编程中遇到的scanf的返回值被忽略的问题 说句实话,网上有很多类似的教程,但是我自己也遇到了,所以我决定自己写一篇博客用来记录,这也算是我的一个成长历程吧. ...

  3. C语言主函数返回值含义

    上大学时候我学习C语言的时候主函数的类型还可以用void类型,毕业之后想再次加深一下编程的水平发现我找的编译器居然要求主函数必须具有int类型的返回值.简单的看了一点教程以及网络上的介绍之后,也不管三 ...

  4. scanf函数返回值

    scanf函数返回成功读入的数据项数,读入数据时遇到了"文件结束"则返回EOF. 如:scanf("%d %d",&a,&b); 函数返回值为i ...

  5. c语言规定 函数返回值6,C语言六函数.ppt

    C语言六函数 第六章 函数 任何一个结构化程序都可以由三种基本结构组成:顺序结构.选择结构和循环结构,为了利用这三种结构编写结构化程序,通常需要采用自顶向下.逐步细化和模块化的程序设计方法,这也就是说 ...

  6. r语言 c 函数返回值,R语言入门 输出函数 cat、print、paste等区别理解

    一. 简介 cat.print函数都是输出函数 > cat("hello world") hello world >> print("hello wor ...

  7. c语言子函数返回值,C语言函数说明与返回值

    在学习C语言函数以前,我们需要了解什么是模块化程序设计方法. 人们在求解一个复杂问题时,通常采用的是逐步分解.分而治之的方法,也就是把一个大问题分解成若干个比较容易求解的小问题,然后分别求解.程序员在 ...

  8. c语言recv函数返回值,谈谈recv()函数的返回值

    网上某论坛有这样一个问题:当recv()函数的返回值为0时,能不能在接收端不关闭套接字,以便这条建立好的C/S通信下次可以直接使用? 我对这个问题的回答是:不能. 原因是:此时即使接收端不关闭套接字, ...

  9. c语言scanf()的返回值

    例如scanf("%d %d",&a,&b)    若a,b均正确得到值,则返回2 若a得到值,b不得到值,则返回1(返回成功接收到赋值的个数) 如果遇到错误或遇到 ...

最新文章

  1. usaco Job Processing(mark)
  2. 这10个机器学习开源工具,你用过吗?
  3. 无人驾驶中的 3D 目标检测技术
  4. linux mode4的双网卡绑定,Linux实现双网卡绑定自动化脚本 | 聂扬帆博客
  5. Android之PhotoView使用(原创)
  6. C语言 typedef 和 define 区别 - C语言零基础入门教程
  7. 终于有人把幸存者偏差讲明白了
  8. 802.11n协议解析(一)
  9. Python IDLE 基本操作
  10. 【习题 3-1 UVA - 1585】Score
  11. 345取出值怎么算角度_资料分析怎么提分?这几个公式你必须会!
  12. excel设置曲线图横坐标值
  13. firefox改html内容,可以firefox扩展修改HTML文档的DOM然后保存为HTML吗?
  14. 2018 IEEE International Conference on Cyborg and Bionic Systems (CBS)国际会议的组织和参入感悟
  15. JS 生成条形码(一维码)jsBarcode
  16. 蓝牙BT射频测试(转发)
  17. cesium中文教程(cesium中文教程PDF)
  18. linux wine 原理,wine的工作原理与自动运行PE程序
  19. 模拟点击框架网页内无id无name的按钮
  20. MOOS-ivp 实验十四(2)behavior简要概述

热门文章

  1. 编程语言那么多,我为什么推荐你学Java?
  2. Sennedjem古埃及匠人的水壶
  3. stm32 c语言内联函数,【实战经验】STM32F3xx/STM32F4xx使用浮点开方指令
  4. Unreal Engine 4 系列教程 Part 5:制作简单游戏
  5. org.apache.axis2.AxisFault: Exception occurred while trying to invoke service method GetPassword
  6. 酷睿i5 9400f属于什么档次 i5 9400f参数 怎么样
  7. 表格动态增加行(JS)
  8. 星际官方小说《刀锋女王》——第4章
  9. 不懂开发,也可以开发酷炫的可视化大屏
  10. devccp中c语言输入二维数组,课内资源