The C Programming Language(第 2 版) 笔记 / 1 介绍 / 1.5 字符输入/输出 / 1.5.2 字符计数

目录、参考文献


1.5.2 字符计数

下列程序用于对字符进行计数:

#include <stdio.h>

/* count characters in input; 1st version */ 
main() 
{ 
    long nc; 
    nc = 0; 
    while (getchar() != EOF) 
        ++nc; 
    printf("%ld\n", nc); 
}

换行符也会计数

[vagrant@node01 1.5]$ gcc -o ./out/1.5.2_01_test 1.5.2_01_test.c
[vagrant@node01 1.5]$ ./out/1.5.2_01_test
abc
a
6

++nc; 引入了一个新的运算符 ++,其功能是执行加 1 操作
可以用语句 nc = nc + 1 代替它,但 语句 ++nc 更精炼一些,且通常效率也更高
与该运算符相应的是自减运算符 --
++-- 这两个运算符既可以作为前缀运算符(如:++nc),也可以作为后缀运算符(如:nc++
这两种形式在表达式中具有不同的值,但 ++ncnc++ 都使 nc 的值加 1

该字符计数程序使用 long 类型的变量存放计数值,而没有使用 int 类型的变量
long 整型数(长整型)至少要占用 32 位存储单元
在某些机器上 intlong 类型的长度相同
在另一些机器上 int 类型的值可能只有 16 位存储单元的长度(最大值为 32767
这样,相当小的输入都可能使 int 类型的计数变量溢出
%ld 告诉 printf 函数其对应的参数是 long 整型

使用 double(双精度浮点数)类型可以处理更大的数字:

#include <stdio.h>

/* count characters in input; 2nd version */ 
main() 
{ 
    double nc; 
    for (nc = 0; getchar() != EOF; ++nc) 
        ; 
    printf("%.0f\n", nc); 
}
[vagrant@node01 1.5]$ gcc -o ./out/1.5.2_02_test 1.5.2_02_test.c
[vagrant@node01 1.5]$ ./out/1.5.2_02_test
abc
abcd
9

对于 floatdouble 类型 printf 函数都使用 %f 进行说明
%.0f 强制不打印小数点和小数部分

在该程序段中,for 循环语句的循环体是空的,这是因为所有工作都在测试(条件)部分与增加步长部分完成了
但 C 语言的语法规则要求 for 循环语句必须有一个循环体,因此用单独的分号代替
单独的分号称为空语句,它正好能满足 for 语句的这一要求,把它单独放在一行是为了更加醒目


目录、参考文献

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值