C语言写出强大而灵活的诀窍是控制程序流。对于计算机科学(是研究计算机,不是用计算机做研究)而言,一门语言应该提供以下
3种形式的程序流:
*执行语句序列;
*如果满足条件就重复执行语句序列(循环)
*通过测试选择执行哪一个语句序列(分支)
C语言中的循环:while循环、for和do while。
第3种形式用于在不同的执行方案之间进行选择,让程序更“智能”,且极大地提高了计算机的用途。
6.1 再探while循环
根据用户从键盘输入的整数进行求和。程序利用了scanf()的返回值之来结束循环。
/* summing.c -- sums integers entered interactively */
#include
int main(void)
{
long num;
long sum = 0L; /* initialize sum to zero */
int status;
printf("Please enter an integer to be summed ");
printf("(q to quit): ");
status = scanf("%ld", &num);
while (status == 1) /* == means "is equal to" */
{
sum = sum + num;
printf("Please enter next integer (q to quit): ");
status = scanf("%ld", &num);
}
printf("Those integers sum to %ld.\n", sum);
return 0;
}
/* 输出:
*/
0后面添加L后缀明确告诉编译器把0当做long类型对待。
6.1.1 程序注释
==运算符是C的相等运算符(equality operator)。
scanf()的两个不同特性来完成。首先,使用scanf()读取num的一个新值,然后,检查scanf()的返回值判断是否成功获取值。scanf()返回成功读取项的数量。如果读取不成功,scanf()则会把输入的字符放回输入队列中。
如果scanf()在转换值之前出了问题(例如,检测到文件结尾或遇到硬件问题,会返回一个特殊值EOF(其值通常被定义为-1)。这个值也会引起循环终止。
程序利用scanf()的双重特性避免了在循环中交互输入时的这个棘手的问题。
程序的结构。总结如下:
把sum初始化为0
提示用户输入数据
读取用户输入数据
当输入的数据位整数时,
输入添加给sum,
提示用户进行输入,
然后读取下一行输入
输入完成后,打印sum的值
顺带一提,这叫作伪代码(pseudocode),是一种简单的句子表示程序思路的方法,它与计算机语言的形式相对应。伪代码有助于设计程序的逻辑。确定程序的逻辑无误之后,再把伪代码翻译成实际的编程代码。使用伪代码的好处之一是,可以把注意力集中在程序的组织和逻辑上,不用在设计程序时还有分心如何用编程语言来表达自己的想法。
while循环是入口条件循环。
6.1.2 C风格读取循环
可以用这些代码替换:
while( scanf( "%ld", &num ) == 1 ){
/*循环行为*/
}
第2种形式同时使用scanf()的两种不同的特性。C的语法特性可以让你的程序更简洁。