警告:
由于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
用于测试两个表达式是否相等的操作符是==,如果误用了=操作符,虽然也是合法的表达式
,==的比较操作符,=是赋值操作符
阅读(1088) | 评论(0) | 转发(0) |