改良版《C Primer Plus第六版》编程练习第七章第2题

本文介绍了一个C语言程序的设计思路,该程序能够连续读取用户输入直到遇到特定字符为止,并将输入的每个字符及其对应的ASCII码打印出来。特别地,程序能够正确处理包括换行符在内的所有输入字符。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目如下:编写一个程序读取输入,读到#字符停止。程序要打印每个输入的字符以及对应的十进制ASCII码,每行打印8个“字符-ASCII码”组合。

网络上的示例都是只支持一行输入,也就是说字符‘\n’也会成为输入结束的标志,感觉这样就偏离了题意,因为按照题意来看换行符也应该成为“输入的字符”并参与转换,基于这个观点,对程序进行了一点改动:

#include<stdio.h>
#include<string.h> //为使用strlen函数做准备 
int main(void)
{
    int i=0;
    char ch;
    char chs[101]={};//创建一个允许输入100个字符的字符型数组 
    while((ch=getchar())!='#')
    {
        chs[i]=ch;
        i++;
        if(i==100) break;//只会记录前100个字符,后面的会停止循环,防止内存错误 
    }
    for(i=0;i<strlen(chs);i++)
    {
        switch(chs[i])//处理了回车与Tab两个特殊输入 
        {             
            case 10:printf("\\n-10\t");break;
            case 9:printf("\\t-9\t");break;
            default:printf("%c-%d\t",chs[i],chs[i]);//其他输入会以统一形式处理 
        }
        if((i+1)%8==0) printf("\n");//如果输出数量满足8个就换行 
    }
    return 0;
}

技术限制,设计了只能记录前100位的程序,望有意者给予改进。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值