Chinaunix首页 | 论坛 | 博客
  • 博客访问: 209651
  • 博文数量: 76
  • 博客积分: 2231
  • 博客等级: 大尉
  • 技术积分: 826
  • 用 户 组: 普通用户
  • 注册时间: 2011-10-27 09:15
文章分类

全部博文(76)

文章存档

2011年(76)

分类: C/C++

2011-11-24 14:10:15


警告:
由于scanf函数的实现原理,所有标量参数的前面必须加上一个"&"符号,数组参数前面不需要加
"&"符号。但是数组参数中如果出现了下标引用,也就是说实际参数是数组的某个特定元素,那么
它的前面也必须加上"&"符号。
警告:
第二个需要注意的地方是格式代码,它与printf函数的格式代码颇为相似又并不完全相同。前五个
格式代码用于读取标量值,所以变量参数的前面必须加上"&"符号。使用所有格式代码(除了%c外)
输入值之前的空白(空格、制表符、换行符等)会被跳过,值后面的空白表示该值的结束。因此,
用%s格式码输入字符串时,中间不能包含空白。

scanf("%d", &columns[num])
格式码%d表示需要读取一个整型值。字符是从标准输入读取,前面空白将被跳过。然后这些数字
被转换为一个整数,结果存储与指定的数组元素中。我们需要在参数前面加上一个"&"符号,因为
数组下标选择的是一个单一的数组元素,他是一个标量。

while  循环的测试条件由三个部分组成
num < max
这个测试条件确保函数不会读取过多的值,从而导致数组溢出。如果scanf函数转换了一个整数之后。
它就回返回1这个值。
最后
columns[num] >= 0
这个表达式确保函数所读取的值是正数。

常用scanf格式代码
%d 读取一个整型值  int
%ld 读取一个长整型值  long
%f 读取一个浮点值 float
%lf 读取一个双精度浮点值 double
%c 读取一个字符  char
%s 读取一个字符串 char型数组


提示:
标准并未硬性规定C编译器对数组下标的有效性进行检查,而且绝大多数C编译器确实也不
进行检查。因此,如果你需要对数组下标的有效性检查,必须自行编写代码,如果此处不
进行num < max检查测试,如果程序所读取的文件包含超过20个列标号,那么多出来的值
就回存储在紧随数组之后的内存位置,这样就回破坏原先存储在这个位置的数组,可能是
其他变量,也可能是函数的返回地址,这可能会导致很多种结果,程序可能不会按照你预
想的那样运行。

scanf函数每次调用时都从标准输入读取一个十进制整数。如果转换失败,不管是因为文件
已经读完还是因为下一次输入的字符无法转换为整数,函数都会返回0,这样就会使整个循
环终止。如果输入的字符可以合法的转换为整数,那么这个值就会转换为二进制数存储与
数组元素columns[num]中,然后scanf函数返回1

用于测试两个表达式是否相等的操作符是==,如果误用了=操作符,虽然也是合法的表达式
,==的比较操作符,=是赋值操作符
阅读(1042) | 评论(0) | 转发(0) |
0

上一篇:printf

下一篇:scanf

给主人留下些什么吧!~~