- 浏览: 543583 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (231)
- 一个操作系统的实现 (20)
- 汇编(NASM) (12)
- Linux编程 (11)
- 项目管理 (4)
- 计算机网络 (8)
- 设计模式(抽象&封装) (17)
- 数据结构和算法 (32)
- java基础 (6)
- UML细节 (2)
- C/C++ (31)
- Windows (2)
- 乱七八糟 (13)
- MyLaB (6)
- 系统程序员-成长计划 (8)
- POJ部分题目 (10)
- 数学 (6)
- 分布式 & 云计算 (2)
- python (13)
- 面试 (1)
- 链接、装载与库 (11)
- java并行编程 (3)
- 数据库 (0)
- 体系结构 (3)
- C++ template / STL (4)
- Linux环境和脚本 (6)
最新评论
-
chuanwang66:
默默水塘 写道typedef void(*Fun)(void) ...
C++虚函数表(转) -
默默水塘:
typedef void(*Fun)(void);
C++虚函数表(转) -
lishaoqingmn:
写的很好,例子简单明了,将观察者模式都表达了出来。
这里是ja ...
观察者模式——Observer
http://blog.csdn.net/linuxxulin/article/details/7018321
不经意中发现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++引用计数
2013-12-29 14:48 1166主要参考《提高C++性能的编程技术》第12章 引用计数 ... -
string.h(二)C的字符串分隔函数strtok()
2013-12-19 13:25 1508char *strtok(char *str1, c ... -
关于size_t 和 ptrdiff_t 【转】
2013-12-12 18:57 859Abstract Introduction size ... -
new, operator new 和 placement new
2013-12-12 17:08 1077一、new 和 delete 的过程: 在进行一切讲解之 ... -
C/C++柔性数组 char[0]
2013-11-08 15:57 1010在标准C和C++中0长数组 ... -
填充与对齐——指定变量的地址偏移【转】
2013-11-08 14:53 859转自 http://hi.baidu.com/bai_ye ... -
数组和指针并不同(总结《C专家编程chap4》)
2013-10-06 14:55 941左值(地址)和右值(地址的内容): 1. 使用数组 ... -
细说C++全局变量、局部变量和静态局部变量【转】
2013-08-15 17:17 864转自http://see.xidian.ed ... -
strcpy和strncpy用法和区别(转)
2013-07-31 17:37 31strcpy和strncpy用法和区别 转自:http ... -
stl iterator&const_iterator
2013-07-11 09:38 14iterator和const_iterator访问conta ... -
C++类对象创建过程揭密(转载)
2013-05-24 16:56 927转载:http://blog.csdn.net ... -
C调用汇编
2013-03-27 20:28 1460一、汇编语言的两种语法格式 Intel格式: 大 ... -
C++四个类型转换关键字const_cast, static_cast, dynamic_cast, reinterpret_cast
2013-02-27 10:13 2537C风格的强制类型转换( ... -
C/C++中内存模型
2012-12-30 11:07 1634一直以来,C++ ... -
map使用
2012-12-29 15:21 35需要#include <map> 定义map& ... -
C++调用C
2012-11-29 22:42 1279一般地,C++调用C有两种形式(网上资料一般没讲全): ... -
关于计算精度
2012-11-22 14:53 876本文是Sam我总结的,在C++学习过程中常见的一些涉及 ... -
C++随机数
2012-11-07 19:41 914C++随机数 #include<iostream ... -
C文件操作(一)
2012-11-07 19:11 1612C文件操作(流式文件 &a ... -
C++中的内联函数inline
2012-07-13 19:16 1073在c++中,为了解决一些频繁调用的小函数大量消耗栈空间或者 ...
相关推荐
(2条消息) scanf返回值被忽略的原因及其解决方法_灶星闪闪的博客-CSDN博客(2).url
3. **错误处理**:如果输入不符合格式,`scanf()`可能会失败并返回非零值,此时需要检查返回值来处理错误。 4. **跳过空白字符**:默认情况下,`scanf()`会自动跳过前导的空白字符,直到遇到非空白字符才开始读取。 ...
### scanf函数详解 #### 一、函数概述 `scanf`函数是C语言中用于从标准输入设备(通常是键盘)读取格式化数据的一种方法。它允许程序员根据指定的格式读取用户输入的数据,并将其存储到相应的变量中。`scanf`函数...
4. **错误处理**:`scanf`的错误处理不如`cin`直观,当读取失败时,返回值会小于提供的变量数量。需要通过返回值检查是否成功读取。 5. **内存溢出**:`scanf`不会检查目标变量是否有足够的空间存储输入,可能导致...
- `scanf`函数返回值是读取成功的项目数。如果与预期不符,可能会导致数据丢失或程序出错。 5. **陷阱与常见错误**: - 不匹配的类型:如尝试用`%d`读取浮点数会导致问题。 - 没有提供足够的变量:如果`format`...
`scanf`函数的返回值表示成功读取的变量数量,如果所有变量都被正常读取,返回值就是变量的数量。但当输入不匹配或遇到非法数据时,可能会导致键盘缓冲区中存在未处理的输入,这需要开发者特别留意。 `scanf`处理...
通常做法是检查返回值,如果返回值小于预期的赋值项数,表示输入可能有误。 ### 结语 掌握`scanf()`函数的正确使用是C语言学习者的基本技能。理解其工作原理,注意格式化字符串、变量地址和数据类型匹配,以及如何...
3. **错误检测**:通过检查`scanf`的返回值,可以判断是否成功读取了所有期望的输入。如果返回值小于预期的参数数量,可能是因为输入不符合格式或输入结束。 4. **预读和跳过字符**:使用`*`前缀可以告诉`scanf`跳...
### `scanf`的返回值 `scanf`函数返回的是读取成功的项目数,包括成功匹配的格式说明符和赋值的变量。如果遇到无法匹配的输入或者读取过程中出现错误,`scanf`将返回非零值,具体值取决于失败的位置。 ### 实际...
此时,可以通过检查`scanf`的返回值来判断是否成功读取。 4. **清除输入缓冲区**:在某些情况下,可能需要清除输入缓冲区中的剩余字符,这可以使用`getchar()`或`fflush(stdin)`来实现,但`fflush(stdin)`的行为在...
根据提供的文件信息,本文将详细解析“C语言无参无返回值计算器”的核心知识点,包括其功能、实现原理以及代码解读等。 ### C语言无参无返回值计算器概述 此计算器是一个简单的C语言程序,其特点是没有参数输入也...
因为`scanf()`的返回值在成功读取时不会是0,所以`~scanf()`在读取成功时会得到非零值,导致循环继续。然而,如果`scanf()`返回EOF,它将变为0,`~EOF`会得到一个非零值(通常是一个大的负数),这也会导致循环继续...
在C语言中,`sscanf()`、`vsscanf()`和`vscanf()`函数都是用于从不同来源读取数据并按指定格式进行解析的。它们是`scanf()`家族的一部分,提供了一种灵活的方式来处理输入数据。 1. `sscanf()`函数: `sscanf()`...
- **输入处理**:使用`scanf("%d", &variable);`获取用户输入的整数,并将其存储到指定的变量中。 - **输出显示**:使用`printf`函数显示菜单、提示信息以及最终的计算结果。 #### 2.3 控制流程 - **循环控制**:...
- `printf()`, `sprintf()`, `scanf()`, 和 `sscanf()` 的返回值是成功处理的格式化项的数量。这在需要知道处理了多少输入或输出时很有用。 总结来说,这些函数提供了强大的格式化输入输出能力,可以根据需要灵活...
它与`scanf`函数类似,但`fscanf`是从指定的文件流中读取,而不是从标准输入(通常是键盘)读取。在深入理解`fscanf`的用法之前,我们先来了解一下基本的文件操作概念。 在C语言中,文件操作通常涉及打开、读取、...
C语言 sscanf, scanf, fscanf 正则表达式用法 ...scanf族函数可以用来读取输入数据,但是需要注意格式参数的设置和返回值的解释。同时,scanf族函数也支持有限的正则表达式用法,可以用于读取特定的字符串。