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

全部博文(76)

文章存档

2011年(76)

分类: C/C++

2011-11-24 14:08:56

C语言中,while循环的功能和它在其他语言中一样。先测试表达式的值,如果是假的(0)
就跳过循环体。如果表达式的值是真的(非0),就执行循环体内的代码,然后再重新测表达式
的值。
gets函数从标准输入读取一行文本并把它存储于作为参数传递给它的数组中。一行输入由一串
字符组成,以一个换行符(newline)结尾。gets函数丢弃换行符,并在该行的末尾存储一个
NUL字节(一个NUL字节是指字节模式为全0的字节,类似'\0'这样的字符常量)。然后gets函
数返回一个非NULL值,表示改行已被成功读取。当gets函数被调用但事实上不存在输入时,
它就返回NULL值,表示它达到了输入的末尾(文件尾)。

尽管C语言并不存在string类型,但存在一个约定:字符串就是一串以NUL字节结尾的字符。
NUL是作为字符串终止符,它本身并不被看做是字符串的一部分。字符串常量(string literal)
就是源程序中被双引号括起来的一串字符。例如,字符串常量:
"Hello"
在内存中占据6个字节的空间,按顺序分别是H、e、l、l、o和NUL。
NUL是ASCII字符集中'\0'字符的名字,它的字节模式为全0.NULL指一个其值为0的指针。
它们都是整型值,其他相同,所有它们可以互换使用,然而,你还是应该使用适当的常量,
因为它能告诉阅读程序的人不仅使用0这个值,而且告诉他这个值的目的。
符号NULL在头文件stdio.h中定义,另一方面,不存在预定义的符号NUL,所有如果你想
使用它而不是字符常量'\0',你必须自行定义

常见printf格式代码
%d 以十进制形式打印一个整型值
%o 以八进制形式打印一个整型值
%x 以十六进制形式打印一个整型值
%f 打印一个浮点值
%c 打印一个字符
%s 打印一个字符串
\n 换行
int read_column_numbers(int columns[], int max);
void rearrange(char *output, char const *input,
     int n_columns, int const columns[]);
这些声明被成为函数原型(function prototype),它告诉编译器这些以后将在源文件中定义的
函数特征。
rearrange函数接收4个参数。其中第1个参数和第2个参数都是指针。指针指定一个存储于计算机
内存中的值的地址。第2和第4个参数被声明为const,这表示将不会修改函数调用者
所传递的这两个参数。关键字void表示函数并不返回任何值,在其他语言里,这种无返回值
的函数被成为过程(procedure).

在函数声明的数组参数中,并未指定数组的长度,这种格式是正确的。允许单个函数操纵任意
长度的一维数组,这个特性不利的一面是函数没法知道该数组的长度。如果确实需要知道数组
的长度,它的值必须作为一个单独的参数传递给函数。

当本例的read_column_numbers函数被调用时,传递给函数的其中一个参数的名字碰巧与
给出的形参的名字相同。C语言中形参的名字和实参的名字并没用什么关系。

int num = 0;
int cn;
这里声明了两个变量,它们是该函数的局部变量。第一个变量在声明的时候被初始化为0,但是
第二个变量并未初始化。更准确的说,它的初始值将是一个不可预料的值,也就是垃圾。这个函
数它没用初始值并不碍事,因为函数对这个变量所执行的第一个操作就是对他赋值
/*
**取得列标号,如果所取的数小于0则停止
*/

while (num < max && scanf("%d", &columns[num]) == 1 && columns[num] >= 0)
    num += 1;

这又是一个循环,用于读取列标号。scanf函数从标准输入读取字符并根据格式字符串对它们进行
行转换--类似于printf函数的逆操作。scanf函数接收几个参数,其中第一个参数就是一个格式
字符串,用于描述期望的输入类型。剩余几个参数都是变量,用于存储函数所读取的输入数据。
scanf函数的返回值是函数成功转换并存储于参数中的值的个数。
阅读(1197) | 评论(0) | 转发(0) |
0

上一篇:python标准库函数

下一篇:printf(2)

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