统计输入的行数
标准库保证输入文本流以行序列的形式出现,每一行均以换行符结束。因此,统计行数等价于统计换行符的个数。
#include <stdio.h>
/* count lines in input */
main()
{
int c, nl;
nl = 0;
while ((c = getchar()) != EOF)
if (c == 'n')
++nl;
printf("%dn", nl);
}
在该程序中,while 循环语句的循环体是一个 if 语句,它控制自增语句++nl。if 语句先测试圆括号中的条件,如果该条件为真,则执行其后的语句(或括在花括号中的一组语句)。这里再次用缩进方式表明语句之间的控制关系。
双等于号==是 C 语言中表示“等于”关系的运算符(类似于 Pascal 中的单等于号=及 Fortran 中的.EQ.)。由于 C 语言将单等于号=作为赋值运算符,因此使用双等于号==表示相等的逻辑关系,以示区分。这里提醒注意,在表示“等于”逻辑关系的时候(应该用==),C 语言初学者有时会错误地写成单等于号=。在后面我们将看到,即使这样误用了,其结果通常仍然是合法的表达式,因此系统不会给出警告信息。
单引号中的字符表示一个整型值,该值等于此字符在机器字符集中对应的数值,我们称之为字符常量。但是,它只不过是小的整型数的另一种写法而已。例如,'A'是一个字符常量;在 ASCII 字符集中其值为 65(即字符 A 的内部表示值为 65)。当然,用'A'要比用 65 好,因为。'A'的意义更清楚,且与特定的字符集无关。
字符串常量中使用的转义字符序列也是合法的字符常量,比如,'n'代表换行符的值,在 ASCII 字符集中其值为 10。我们应当注意到,'n'是单个字符,在表达式中它不过是一个整型数而已;而"n"是一个仅包含一个字符的字符串常量。
下面编写一个统计空格、制表符与换行符个数的程序。
#include <stdio.h>
main()
{
/* blanks, tabs, and newlines */
int c, nb, nt, nl;
nb = 0;
nt = 0;
nl = 0;
while( (c = getchar()) != EOF)
{
if(c == ' ')
++nb;
if(c == 't')
++nt;
if(c == 'n')
++nl;
}
printf("%d %d %d n", nb, nt, nl);
}
统计输入的单词个数
这里对单词的定义比较宽松,它是任何其中不包含空格、制表符或换行符的字符序列。下面这段程序是 UNIX 系统中 wc 程序的骨干部分:










