江湖车侠|C和指针:如何快速上手C语言( 四 )
最后,当循环结束时, main函数返回值EXIT_SUCCESS,该值向操作系统提示程序成功执行 。 右花括号标志着main函数体的结束 。
1.1.4 read_column_numbers函数
这几行构成了read_column_numbers函数的起始部分 。 注意,这个声明和早先出现在程序中的该函数原型的参数个数和类型以及函数的返回值完全匹配 。 如果出现不匹配的情况,编译嚣就会报错
在函数声明的数组参数中,并未指定数组的长度 。 这种格式是正确的,因为不论调用函数的程序传递给它的数组参数的长度是多少,这个函数都将照收不误 。 这是一个伟大的特性,它允许单个函数操纵任意长度的一维数组 。 这个特性不利的一面是函数没法知道该数组的长度 。 如果确实需要数组的长度,它的值必须作为一个单独的参数传递给函数 。
当本例的read_column_numbers函数被调用时,传递给函数的其中一个参数的名字碰巧与上面给出的形参名字相同 。 但是,其余几个参数的名字与对应的形参名字并不相同 。 和绝大多数语言一样,C语言中形式参数的名字和实际参数的名字并没有什么关系 。 你可以让两者相同,但这并非必须 。
这里声明了两个变量,它们是该函数的局部变量 。 第1个变量在声明时被初始化为0,但第2个变量并未初始化 。 更准确地说,它的初始值将是一个不可预料的值,也就是垃圾 。 在这个函数里,它没有初始值并不碍事,因为函数对这个变量所执行的第1个操作就是对它赋值 。
这又是一个循环,用于读取列标号 。 scanf函数从标准输入读取字符并根据格式字符串对它们进行转换-类似于printf函数的逆操作 。scanf函数接受几个参数,其中第1个参数是一个格式字符串,用于描述期望的输入类型 。 剩余几个参数都是变量,用于存储函教所读取的输入数据 。 scanf函数的返回值是函数成功转换并存储于参数中的值的个数 。
我们现在可以解释表达式:
格式码%d表示需要读取一个整型值 。 字符是从标准输入读取,前导空白将被跳过 。 然后这些数字被转换为一个整数,结果存储于指定的数组元素中 。 我们需要在参数前加上一个"&"符号,因为数组下标选择的是一个单一的数组元素,它是一个标量 。
while循环的测试条件由3个部分组成:
这个测试条件确保函数不会读取过多的值 , 从而导致数组溢出 。 如果scanf函数转换了一个整数之后 , 它就会返回1这个值 。 最后 ,
这个表达式确保函数所读取的值是正数 。 如果两个测试条件之一的值为假 , 循环就会终止 。
表1.2 常用scanf格式码
推荐阅读
- 定格|有的人演再多的喜剧,也掩盖不了江湖人物的锋芒
- 阿里巴巴|马云,江湖再见
- 滴滴出行|网约江湖:生态闭环的滴滴
- 琴歌解说|出怀旧服才是这个游戏的出路,热血江湖:别再弄手游了
- 天涯明月刀手游|三千万预约,天刀手游终测能否让玩家买单?阿暖带你云游江湖
- 鲜闻快讯|行走江湖的七个哲学思维,《我的前半生》唐晶安全友善并不幸福
- 江湖车侠|国产操作系统发布:售价99元,你愿意花费这个价格去尝试吗
- 江湖车侠|谁说小米等于性价比?千元5G实力派,OPPO和VIVO不差
- 艺统江湖|赵丽颖演过的十二部古装电视剧,你最喜欢她的哪个古装扮相?
- 北府财君|收益随即放大十倍,江湖上失传已久的炒股秘籍——仅靠这两招买入技巧
