C语言打印字符时的小细节

最近做 《 C P r i m e r P l u s 》 《C Primer Plus》 CPrimerPlus第七章课后题,其中的第二题给了我一点启发。
题目是这样的:
7 - 2
编写一个程序读取输入读到 # 字符为止,程序要打印每个输入的字符以及对应的 A S C I I ASCII ASCII 码(十进制),每行打印 8 个字符 - A S C I I ASCII ASCII 码 组合。建议:使用字符计数和求模运算符(%)在每八个循环周期时打印一个换行符。
输出形式如下:


我最先给出的代码为:

#include <stdio.h>
int main(void)
{
    char ch;
    int cnt=0;
    while((ch = getchar())!= '#')
    {
        cnt++;
        printf("'%c'-%3d. ",ch,ch);
        if(cnt%8==0){
            printf("\n");
        }
    }
    printf("Done");
    return 0;
}

认为没有问题,但是系统报错了。

因为字符不止我原先认为的数字、大小写字母等,还有一类特殊的字符,如 ‘\n’、 ‘\t’ 等。他们在程序中不会显示出来,而是起一定的作用,如换行,占位等,而不在程序中显示出来。因此,代码应该修改如下:

#include <stdio.h>
int main(void)
{
    char ch;
    int counter = 0;
    while((ch = getchar()) != '#')
    {
        if(counter++%8 == 0)
            printf("\n");
        /* 使用计数器,每八个字符打印一个换行符。注意:
         * 本行代码在counter为 0 时会首先打印一个换行符。
         * */
        if(ch == '\n')
            printf("'\\n'-%03d. ",ch);
        /* 标准输入的换行符需要转换显示方式,否则会可能会在
         * 不足八个字符时就产生产生换行。
         * */
        else if(ch == '\t')
            printf("'\\t'-%03d. ",ch);
            /* 标准输入的制表符需要转换显示方式 * */
        else printf("'%c'-%03d. ",ch,ch);
         /* 其他字符通过打印原字符和十进制数 */
    }
    printf("Done\n");
    return 0;
}

程序增添了对 ‘\n’、 ‘\t’ 字符的判断。

这虽然只是一个小细节,但是不加以纠正,可能会铸成大错,写一篇博客以警示自己。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值